6

REST でエンティティの添付ファイルをモデル化しようとしています。欠陥エンティティに複数の添付ファイルを添付できるとします。すべての添付ファイルには、説明とその他のプロパティ (最終更新日、ファイル サイズなど) があります。添付ファイル自体は任意の形式のファイルです (jpeg、doc ...)

RESTful にモデル化する方法を考えていました

次の2つのオプションについて考えました。

最初のアプローチ (同じリソース、異なる表現を使用):

  • GET 、 content-type:XML on http://my-app/defects/ {id}/attachmentsは、欠陥の添付ファイルのメタデータを XML 形式で返します (説明、最終更新日、ファイル サイズなど)。

  • GET 、 content-type:gzip on http://my-app/defects/ {id}/attachmentsは、欠陥の添付ファイルを zip ファイルで返します

  • GET 、 content-type:mime マルチパート on http://my-app/defects/ {id}/attachmentsは、マルチパート メッセージで欠陥の添付ファイルを返します (バイナリ データと XML メタデータ全体)。

  • http://my-app/defects/ {id}/attachmentsの POST、content-type:XML は、新しい添付ファイルを作成します。メタデータのみで、ファイルは添付されていません (その後、ユーザーはバイナリ データを含む PUT 要求を送信する必要があります)。

  • POST 、 content-type:mime\multi-part on http://my-app/defects/ {id}/attachmentsは添付ファイルを作成し、クライアントはメタデータとファイル自体の両方を 1 回のラウンドトリップで送信できます

2 番目のアプローチ (添付ファイルのデータをメタデータから分離する):

  • GET 、 content-type:XML on http://my-app/defects/ {id}/attachmentsは、欠陥の添付ファイルのメタデータを XML 形式で返します (説明、最終更新日、ファイル サイズなど)。

  • http://my-app/defects/ {id}/attachments/filesの GET 、 content-type:gzipは、単一の zip で欠陥の添付ファイルのバイナリ データを返します。

新しい添付ファイルの作成、最初の呼び出し:

  • http://my-app/defects/ {id}/attachmentsの POST、content-type:XML は、新しい添付ファイルを作成します。メタデータのみで、ファイルは添付されていません (その後、ユーザーはバイナリ データを含む PUT 要求を送信する必要があります)。

次に、バイナリ データ自体を追加します。

  • POST 、 content-type:mime\multi-part on http://my-app/defects/ {id}/attachments/{id}/fileは添付ファイルを作成します

一方では、クライアントが添付ファイルのメタデータとバイナリ データを 1 回のラウンド トリップで作成および取得できるため、最初のアプローチはより堅牢で効率的です。一方、mime-multipart 表現を使用するのは少し気が進まない。消費と生成が面倒だからだ。

編集:フリッカーアップロード REST APIをチェックアウトしました。写真と写真属性の両方を含めるためにマルチパートメッセージを使用しているようです。

4

2 に答える 2

3

この問題の多くは、Atom Pub 仕様によって既に解決されています。こちらをご覧ください

提案するソリューションで注意すべきことの 1 つは、コンテンツ ネゴシエーションを使用してさまざまなコンテンツを配信していることです。私はそれが悪いと考えられていると信じています。コンテンツ ネゴシエーションは、同じコンテンツの異なる表現のみを配信する必要があります。

于 2009-10-08T13:03:05.617 に答える
2

メタデータを個別に管理しないでください。2 部構成のアクションは、REST のポイントを無効にします。

1 つのスムーズな GET/POST/PUT/DELETE と 1 つの -- 比較的 -- 複雑なペイロードが通常行われることです。

「テーブル」内の複数の基礎となる「オブジェクト」であるという事実は、REST とは無関係です。

REST レベルでは、1 つのメッセージで送信される 1 つの複雑なオブジェクトの状態です。

于 2009-10-08T10:35:25.517 に答える