RESTful APIがファイルまたは場所を返すことができるか


12

これはしばらくの間私を困惑させてきました。

たとえば、システムに基本的なコンテンツを提供し、JSONを消費および生成するREST APIがあります。このエンドポイントでは、画像と説明へのURLを生成し、次のように検索されます:// localhost / myApi / pictures / 1

{
    id: 1,
    description: "This is a pretty picture of a daisy",
    URL: <OUR URL>
}

これで、OUR_URLは、たとえば// localhost / myApi / files / pictures / 1などのAPI上の場所を指す必要があります。これにより、JPGが返されます(APIの背後にあるアプリケーションがファイルの物理的なコンテンツを読み取り、それをクライアントにストリーミングします。 )。これは、JSON応答を生成する他のAPIとは明らかに異なり、実際のファイルの読み取りとストリーミングによるオーバーヘッドが発生します。

または、OUR_URLがRESTサービスのスコープ外のURLを指すようにして、//localhost/files/pictures/1.jpgがファイルを直接読み取るようにする必要があります。

だから問題は:

RESTful APIはファイルを返すことができるのでしょうか、それとも単なる場所を返すのでしょうか?


1
RESTの一般的な説明が「クライアントがURLにリクエストを送信し、サーバーが何かを返す」ことになることにお気づきでしょうか。全体のアイデアは、RESTは非常に緩やかに定義されており、ほとんどすべてのURLベースの検索スキームに適応できるということです。

回答:


17

RESTfulサービスは、APIのユーザーにリソースを提供する必要があります。リソースには、JSONまたはXMLからJPEGおよびHTMLまでのさまざまな形式を使用できます。

単一のAPIが単一の形式のリソースのみを提供するという要件や期待さえありません。URIでJSONドキュメントを提供し、URI /myApi/pictures/1からJPEGファイルを提供することに何の問題もありません/myApi/files/pictures/1
さらに極端なケースでは、リクエスターが要求する形式に応じて、同じURLからJSON記述とJPEGファイルの両方を提供することも可能です。


7

URIを返すだけで発生する問題の1つは、プレーンな古いファイルサーバーではセキュリティを確保できないことです。したがって、ファイルにアクセスできるユーザーを制限する必要がある場合は、REST APIで直接返せるようにする必要があります(または、ユーザーが権限を持っていない場合、ファイルは正しい状態ではないなど)。

それ以外の場合は、プレーンな古いURIを返し、それを専用のCDNに移動させることで、プロビジョニング、シンプルさ、およびスケーラビリティに関して多くの利点があります。


authの側面は非常に良い点であり、私が考えたこともありませんでした。
Crazy Dino
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.