3

REST / hipermedia APIの設計、特にdjango-restフレームワークを使用した実装に関してアドバイスを求めたいと思います。

一般的な「エンティティ」の例の代わりに、よりありふれた「ドキュメント」エンティティを使用します。

質問1。

GET /document/?[query]

ドキュメントのリストを取得します。問題は、「ドキュメント」には数十の属性があり、多くの場合、クライアントは少数(特にこの検索)のみを気にすることです-応答のサイズは数回(最大10回)のように異なる可能性があり、サーバーもクエリの方が速い場合があります。また、スキーマがないことを好むことにも言及する必要があります。

私は次のようなサンプルを見つけました

GET /document/attr1, attr2../?[query]

これは、RESTにまったく影響しません。

別の記事では、Content-Types(実際にはリクエストの場合はAccept)を使用することを提案していましたが、例が欠落していて、まだ複雑な感じがあります。何かのようなもの:

Accept: application/json; attrs="attr1,attr2"

これがHTTPのセマンティクスを尊重しているかどうか、またそのようなメディアタイプパラメーターの使用が適切かどうかはわかりません(結局のところ、リソースの別の表現が必要です-一部の属性はフィルターで除外されています)。

質問2。

上記が多かれ少なかれ許容できる解決策である場合、カスタムメディアタイプ属性の解析に関してdjango-restに何か準備ができているかどうか疑問に思います。私が彼のドキュメントで見ることができることから、メディアタイプパラメータは個別に解析(または処理)されません。

編集

いくつかの追加情報:アプリケーションの大部分はOLTPです(キャッシュ可能ではありません)。アーキテクチャは静的ファイルを備えたJSONサーバー、JSヘビークライアントです。

編集2

実際、検索の性質上、新しい(揮発性の)リソース(結果)の作成であるという意見もありましたので、POST方式の方が適しています。これにより、議論中の問題が解消されます。作成したエンティティ(結果)に問題があります。永続化する必要がないためですが、これは必須ではないと思います。問題は、「Location」ヘッダー(偽のURL、Locationヘッダーなしなど)に何を入れるかです。私にとって唯一の一貫した動作は、まさに私がやりたくないことです。検索POSTは検索を実行し、結果をサーバー側に保存して、それにリンクする201を返します。ただし、これは不当な永続性の負荷です...

ブラウザのテストに関して、MIMEタイプtext / htmlは、検索のためのユーザーフレンドリーなフォームを提示する場合があります。

4

1 に答える 1

3

アーキテクチャスタイルは、実装される設計を制約するアーキテクチャに情報を提供します。RESTはアーキテクチャスタイルです。実装オプションが制限されているためではなく、アーキテクチャの不一致のために、URIを設計するのが難しいと感じています。クライアントは、メッセージのサイズを小さくすることで効率を最大化することを「望んでいます」。ただし、選択したアーキテクチャスタイル(REST)は、キャッシュを使用して効率を最大化します。これにより、当然、メッセージが大きくなります(したがってリソースが少なくなります)。アーキテクチャが効率を最大化するためにキャッシングを使用しない場合、RESTスタイルから逸脱しています(そして潜在的に新しいスタイルを作成します。ロイはこの非常に一般的なスタイルのアーキテクチャ分析を行う必要があります)。

解決策は、別のアーキテクチャスタイルを選択するか(RPCはメッセージのサイズを縮小することで効率を最大化する)、スケーラビリティ、シンプルさ、効率、進化可能性、ユーザーが知覚するパフォーマンスなどの品質上の利点があるため、クライアントにRESTを求めるように影響を与えることです。 。

于 2012-11-29T15:20:46.383 に答える