web-dev-qa-db-ja.com

REST API:リクエスト本文をJSONまたはプレーンとしてPOSTデータ?

現在、REST APIを構築しています。現在すべてのGETメソッドは応答形式としてJSONを使用しています。POSTおよびPUT操作のベストプラクティスは何ですか?JSONを使用するリクエスト本文またはプレーンPOST?この問題について何も見つかりません。

TwitterがPOSTたとえば: https://dev.Twitter.com/docs/api/1/post/direct_messages/new

JSON形式を使用する利点は何ですか? githubから入手したAPIコントローラー(半分完了しています)はJSONを想定しています。なぜ私がそれを使うことを選ぶのか本当に疑問に思います。

25
mauserrifle

POST、PUT、GETはすべてHTTP動詞であり、それ自体ではデータを転送するための形式を示していないため、POST format。つまり、選択した方法でデータをエンコードできます。

さて、どのフォーマットを使用するかは、本当にAPIが一般的にどのように使用されるかによって決まります。主にWebブラウザーからのフォーム送信のフィールド化を行う場合は、フォームフィールドのエンコードを使用すると、クライアントとのやり取りが容易になるため、おそらく最も合理的な方法です。

一方、主にAJAX呼び出しからJSONデータを受信する場合は、JSON形式を受信するのが理にかなっている場合があります。両方を行う場合、両方形式のデータを受け入れることができない理由はありません。

考慮すべきもう1つの側面は、やり取りするデータ構造の複雑さです。フォームエンコーディング(クエリ文字列エンコーディングにも同様)はキー値構造ですが、JSON(またはXML)でははるかに豊富なデータ構造が可能です。

最後に、サーバー側とクライアント側の両方にとって最も単純なものを使用します(問題のAPIのプライマリクライアントコンシューマーも作成すると想定しているため)。複雑さが増すと測定可能なメリットが得られることを明確に示すことができるまでは、複雑さよりも単純さが常に優先されます。

また、最後に言及するのは、RESTは、クリーンなURLやHTTP動詞の正しい使用だけではないということです。それらの側面は本当にケーキの上のアイシングです。 RESTアーキテクチャの背後にある中心的な考え方は、ハイパーテキストはアプリケーション状態のエンジンですです。サーバーの応答でURLをたどるだけで、優れたクライアントは利用可能なすべてのアクションについて知ることができ、ベースURL以外のことを知る必要はありません。それから他のすべてを発見することができます。それを明確に定義されたコンテンツタイプと組み合わせると、多くのクライアントが多くのサーバーと通信でき、すべてが同じ「言語」を話し、クライアントは何も知る必要がない世界がありますベースURLとコンテンツタイプ以外のサーバー(またはその逆)について。それがRESTのすべてです。

49
cdeszaq

交換したいデータによって異なります。複雑な構造の場合は、構造化された方法(XMLやJSONなど)で送信する必要があります。 Java Webアプリケーションではjsonの方が軽量なので、XMLよりも望ましいです。

フォームからいくつかのフィールドを送信する場合は、「application/x-www-urlformencoded」タイプも使用できます。

5
stzoannos