1. ホーム
  2. web-services

[解決済み】RESTウェブサービスを使用して、メタデータを含むファイルをアップロードするにはどうすればよいですか?

2022-03-31 09:31:28

質問

私は現在、このURLを公開するRESTウェブサービスを持っています。

http://server/data/media

ユーザーが POST には、次のようなJSONを指定します。

{
    "Name": "Test",
    "Latitude": 12.59817,
    "Longitude": 52.12873
}

をクリックすると、新しいMediaメタデータが作成されます。

さて、メディアメタデータと同時にファイルをアップロードする機能が必要です。どうすればいいでしょうか?という新しいプロパティを導入することができます。 file で、ファイルをbase64エンコードするのですが、もっといい方法はないかと考えていました。

を使用する方法もあります。 multipart/form-data しかし、私はRESTウェブサービスを使っているので、可能な限りJSONを使うことにこだわりたいのです。

どのように解決するのですか?

2段階のアプローチが合理的な解決策であることはGregと同意見ですが、私ならその逆を行います。 私ならそうします。

POST http://server/data/media
body:
{
    "Name": "Test",
    "Latitude": 12.59817,
    "Longitude": 52.12873
}

のようなメタデータ・エントリーを作成し、レスポンスを返すこと。

201 Created
Location: http://server/data/media/21323
{
    "Name": "Test",
    "Latitude": 12.59817,
    "Longitude": 52.12873,
    "ContentUrl": "http://server/data/media/21323/content"
}

クライアントはこのContentUrlを使用して、ファイルデータをPUTすることができます。

この方法の良いところは、サーバーが膨大な量のデータで重くなり始めたとき、返すurlはより多くのスペース/容量を持つ他のサーバーを指すことができることです。 また、帯域幅が問題であれば、ある種のラウンドロビンアプローチを実装することができます。