2

RESTful サービスを構築するとき、私は常に、システムのユーザーに配布できるクライアント ライブラリをどのように開発するかという問題に直面します。

簡単な例を挙げると、エンティティの呼び出し担当者がいて、RESTFul サービスを通じて基本的な CRUD 機能をサポートしたいとします。

  • 人を保存するには、クライアントは POST メソッドを呼び出し、JSON などの適切なデータ構造を渡す必要があります。

  • 誕生日で人を見つけるために、サービスは人のオブジェクトのリストを含む応答で応答します

  • 個人を削除するために、サービスは成功または失敗のメッセージで応答します。

上記の例から、クライアントと共有できる 2 つのオブジェクトが既に存在します: person オブジェクトと response オブジェクトです。これを達成するためにいくつかの方法を試しました:

  1. サーバー呼び出しからの Person オブジェクトをクライアント ライブラリに含めます。このアプローチの欠点は次のとおりです。

    • クライアント コードは、サーバー コードと密結合になります。サーバー側からの変更には、同じリリース中にクライアントが更新を行う必要があります。

    • Person のオブジェクトには、永続化またはシリアル化に使用される依存関係または注釈が含まれる場合があります。クライアントはこのライブラリを気にしません
      が、それらを含めることを強制されます。

  2. Person のオブジェクトに直接関係しないが、必須フィールドを設定するヘルパー クラスを含む Map のサブクラスを含めます。

    • 疎結合ですが、サーバーからのデータ構造が変更されたときにサイレント エラーが発生する可能性があります。
  3. Apache ThriftWADLJson Schemaなどの記述ファイルを使用して、コンパイル時にクライアント オブジェクトを生成します。これにより、オブジェクトの依存関係の問題は解決されますが、依然として強い依存関係が作成されます。これは、SOAP の WSDL を作成するのとほとんど同じです。ただし、このアプローチは広く使用されておらず、例を見つけるのが難しい場合もあります。

アプリケーションのクライアント jar を公開する最良の方法は何ですか?

  1. クライアントが使いやすい
  2. 密結合を作成せず、サーバー側の変更に対するある程度の許容度を作成しません

API のドキュメントの方が優れていると答えた場合、Java アノテーションと POJO からこれらのドキュメントを生成するための優れたツールは何ですか。

4

1 に答える 1

4

これは、通信に使用されるプロトコルに関係なく、一般的な問題です。

最近取り組んでいる REST API (JAX-RS ベース) のいくつかでは、DTO オブジェクトを作成します。これらは単なる POJO です (JAXB が自動的にマーシャリング/アンマーシャリングを行うための追加の注釈がいくつかあります)。これらをサブモジュールとして (maven で) ビルドし、JAR として提供して、API を使用する他のプロジェクトが必要に応じて DTO を使用できるようにします。明らかに、独自のクライアント ライブラリを提供する場合は、これらの DTO を利用できます。それらを個別の JAR (任意のアプリが依存できる) として提供することは、クライアントが必要のないクレイジーな依存関係 (サーバー側のコード全体) を取り込まないことを意味します。

これにより、物事がかなり適切に分離されます。

一方、実際にはクライアントを提供する必要はありません。やっぱりRESTです。REST API が適切に構築され、HATEOAS の原則に従っている場合、API は簡単にクロール/ブラウズできる必要があります。つまり、他の記述スキームは必要ありません。WADL やその他の同様の構造が必要な場合、API はおそらくあまり RESTful ではありません。

于 2013-02-21T22:54:01.830 に答える