私はbackbone.jsで構築された単一のWebページアプリから消費されるjsonRESTWebサービスを開発しています
このAPIを使用すると、プロジェクトに関連するpdfレポートなど、一部のエンティティに関連するファイルをコンシューマーがアップロードできます。
グーグルで調べてスタックオーバーフローで調査を行うと、次のようなアプローチが考えられます。
最初のアプローチ: base64でエンコードされたデータフィールド
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
filename: 'xxxx',
filesize: 222,
content: '<base64 encoded binary data>'
}
2番目のアプローチ:マルチパートフォームの投稿:
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
}
応答としてレポートIDを取得し、それを使用して別の投稿を発行します
POST: /api/projects/234/reports/1/content
enctype=multipart/form-data
バイナリデータを送信するだけです
(これを見てください:https ://stackoverflow.com/a/3938816/47633 )
3番目のアプローチ:バイナリデータを別のリソースに投稿し、hrefを保存します
まず、クライアントでランダムキーを生成し、そこにバイナリコンテンツを投稿します
POST: /api/files/E4304205-29B7-48EE-A359-74250E19EFC4
enctype=multipart/form-data
その後
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
filename: 'xxxx',
filesize: 222,
href: '/api/files/E4304205-29B7-48EE-A359-74250E19EFC4'
}
(これを参照してください:https ://stackoverflow.com/a/4032079/47633 )
私が使用できる他のアプローチがあるかどうか、それぞれの長所/短所、そしてこの種の要件に対処するための確立された方法があるかどうかを知りたかっただけです
最初のアプローチで私が目にする大きな欠点は、クライアントでファイルを完全にロードしてbase64でエンコードする必要があることです。
いくつかの有用なリソース: