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をチェックアウトしました。写真と写真属性の両方を含めるためにマルチパートメッセージを使用しているようです。