RESTエンドポイントにデータをポストすることについて少し議論しています。オブジェクトは非常に複雑であるため、最も簡単な解決策は、JSONとしてシリアル化してこれを送信することです。リクエストボディ。
今問題はこれです:これはコーシャですか?または、JSONをdata = [JSON]のようなフォームパラメータとして設定する必要がありますか?または、アプリケーションを使用してクライアントにデータを送信するようにブラウザにパッケージ化させる代わりに、JavaScriptを使用してapplication/x-www-form-urlencoded
?
私は3つすべてのオプションworkを知っています。しかし[〜#〜] ok [〜#〜]はどれですか?または、少なくとも推奨?
どちらの方法もうまくいくと思いますが、API全体で一貫性を保つことが重要です。私が個人的に選択するオプションは、単にapplication/json
としてコンテンツを送信することです。
POST
を使用しても、application/x-www-form-urlencoded
を使用する必要はありません。これは、Webブラウザーが使用するものであるため、よく使用されるものです。
シリアル化されたJSONとして直接送信することに問題はありません。たとえば、volley
ライブラリのGoogleはデフォルトでこれを行います(明らかにが推奨されます) REST Android用ライブラリ)。
実際のところ、SO JSONの使い方しないについては多くの質問がありますが、「通常の」POSTリクエストを実行しますこれは基本クラスのgetParams()
メソッドを上書きする必要があるため、初心者にとっては直感的ではありません。
しかし、それを持っているグーグルは独自のRESTライブラリがデフォルトでこれをやっている、それが[〜#〜] ok [〜#〜]。
OPは3つのオプションがすべて機能することを述べたので、JSONを要求データの一部として使用できます。
OPは、複雑な構造コンテンツをサポートする必要があるため、JSON入力をサポートする必要があります。しかし、それをこのように考えてください...あなたは何かをするためのリクエストをしているのですか、それとも基本的にドキュメントデータであるものを送信しているだけですか? POST
操作をcreate new entryと同等に使用するため。
そういうわけで、あなたが持っているのは基本的にはCRUDLセマンティクスを持つリソースエンドポイントです。その後のフォローアップは、実際にはapplication/json
に限定されず、リソースエンドポイントが処理することになっている任意のタイプです。
(特にJAX-RSの場合)application/x-www-urlencoded
の方が優れていることがわかりました。
application/x-www-urlencoded
を使用します。非リソースエンドポイントの例:
GET
を使用します)multipart/form-data
も検討しますが、JAX-RSにはこの1つの標準がありません。JerseyとRestEasyには独自の実装があります)