web-dev-qa-db-ja.com

JSONがREST APIによって返される場合のMIMEタイプは何ですか?

My REST APIはJSONを返します。

現在、MIMEタイプとしてtext/plainを返していますが、おかしいと感じています。 application/x-javascriptまたは他の型を返す必要がありますか?

2番目の質問は、エラー状態のHTTPステータスコードに関するものです。 REST APIがエラー状態を返している場合、JSONとして返しています

{ result: "fail", errorcode: 1024, errormesg: "That sucked. Try again!" }

HTTPステータスコードは200 OKのままですか?

67
ashitaka

[〜#〜] json [〜#〜] 仕様では、application/json、および [〜#〜] ietf [〜#〜] および [〜#〜] iana [〜#〜] レジストリでサポートされているようです。

2番目の質問では、メッセージ処理が何らかの方法で失敗した場合、構造化された標準エラー応答をJSONメッセージとして返す必要があると思います。何らかの理由でメッセージをバックエンドハンドラに配信できない場合にのみ、HTTPエラーコードを検討してください。

更新2014-06-27:クライアント(ブラウザ)が200の応答でしか動作していなかった時代は昔であり、RESTful APIの一般的なアドバイスは応答に適したHTTP応答コード、成功した応答には2xx(PUTには201 Created、DELETEには204 No Content)、API自体からのエラー条件を含むすべてのエラー状態には4xxおよび5xxを使用します。

77
Lawrence Dol
19
inquam

HTTPエラーステータスとアプリケーション固有のペイロードの両方で返信することを好みます。

10
david

いいえ、エラー状態で200を返すべきではありません。

ステータスコードを繰り返すか、応答ペイロードに詳細なエラーコードを含めることは問題ありません。

10
Julian Reschke

適切なContent-typeを返すにはapplication/jsonRFC 4627 に従い、MIMEタイプIANAも登録します(実際、IANAのページに表示されます)。もちろん、クライアントを作成する場合は、受け入れる内容をより自由にしたいだけでなく、text/jsonおよびtext/x-json

エラーが発生した場合、HTTP 200をnot返す必要がありますが、これは根本的に非RESTfulです。私は時々あなたのエラーに完全に一致しないことを知っていますが、 RFC 2616セクション10.4 -10.5で最も近い4XX(クライアントの障害)または5XX(サーバーの障害)エラーを選択し、 JSON。

6
LukeShu

「REST API」によってRESTアーキテクチャに従うことを意味する場合、使用するメディアタイプは、REST AP​​Iを通じて公開する機能によって決まります。新しいオブジェクトを作成できるようにしたいですか?オブジェクトのリストを照会しますか?オブジェクトを編集しますか?その場合、使用する適切なRESTfulメディアタイプは、vnd.collection + jsonになります。これは、jsonオブジェクトのコレクションを操作するハイパーテキストリンクインターフェイスを定義しているためです。

注:RESTful APIはメディアタイプapplication/jsonを使用できますが、このメディアタイプにはハイパーテキストリンクRESTfulインターフェイスがないため、状態変更のエンドポイントになります。

また、HTTP RPC呼び出しがアプリケーション/ jsonオブジェクトを返し、他のHTTP RPC呼び出しがそれらのオブジェクトを操作するWeb APIアーキテクチャに従うことも完全に受け入れられます。状態変更を使用およびナビゲートするためのハイパーテキストリンクインターフェイスはありません。しかし、これはRESTではありません。

RESTのこの説明が気に入っています(RESTの作成者による):

REST APISはハイパーテキスト駆動である必要があります

つまり、アプリケーション状態のエンジン(およびAPI)がハイパーテキストによって駆動されていない場合、RESTfulにすることもREST AP​​Iにすることもできません。限目。

また、この投稿の説明からRESTfulアプリケーションのこの例があります。 Lost Boys's Spam-E REST Application

1
Jason