私はAPIを設計していますが、GETリクエストでJSONペイロードを送信するのが良いのだろうか?この他の質問Payloads of HTTP Request MethodsでHTTPリクエストのペイロードを取得する
、我々はthis linkに応じて見つけることができます。
- HEAD - いいえ、定義されたボディの意味。
- GET - 定義済みのボディセマンティクスがありません。
- PUT - ボディサポート。
- POST - ボディサポート。
- DELETE - 定義済みのボディセマンティクスはありません。
- TRACE - ボディはサポートされていません。
- オプション - ボディはサポートされていますが、セマンティクスはありません(将来は多分)。
これは、ペイロードとともにGETリクエストを送信すべきではないということですか? これにはリスクがありますか?
- このようなペイロードを送信できないHTTPクライアントライブラリがあるようですか?
- Java APIコードは特定のアプリケーションサーバーで移植できませんか?
- 他に何か?
私はElasticSearchがGET要求に、このようなペイロードを使用していたことが判明:
$ curl -XGET 'http://localhost:9200/twitter/tweet/_search?routing=kimchy' -d '{
"query": {
"filtered" : {
"query" : {
"query_string" : {
"query" : "some query string here"
}
},
"filter" : {
"term" : { "user" : "kimchy" }
}
}
}
}
'
だから、この人気libaryはそれをしないと、誰も文句ない場合は、おそらく私は同じことを行うことができますか?
ところでこれはqueryStringパラメータとJSONペイロードを混在させても問題ないのですか?このElasticSearchクエリのようになります。もしそうなら、どの引数がqueryStringパラメータまたはペイロードパラメータでなければならないかを知るためのルールがありますか?ここで
我々は読むことができます:GETリクエストで体を含めて約 HTTP GET with request body
ロイフィールディングのコメントを。
はい。言い換えれば、どんなHTTP要求メッセージも メッセージ本文を含むことが許されているので、それを念頭に置いてメッセージを解析する必要があります。しかし、サーバ のGETのセマンティクスは、本体が存在する場合、 が要求に対して意味的意味を持たないように制限されています。 の解析に関する要件は、メソッドのセマンティクスの要件とは別です。
はい、GETを使用して本文を送信できます。いいえ、 には役に立ちません。
これはHTTP/1.1のレイヤード設計の一部で、仕様がパーティション化された時点で(作業中)再び になります。
....ロイ
それはqueryParamにうまく収まらないサーバーへの複雑なクエリを送信するために私の意見では理にかなっているので、それは、便利なことはありませんなぜ、私は本当に理解していませんまたはmatrixParam。 は、私はそのように呼び出すことができるAPIを設計する予定です
... ElasticSearchのAPIの設計者が同じだと思うと思う:
curl -XGET 'http://localhost:9000/documents/inbox?pageIndex=0&pageSize=10&sort=title'
curl -XGET 'http://localhost:9000/documents/trash?pageIndex=0&pageSize=10&sort=title'
curl -XGET 'http://localhost:9000/documents/search?pageIndex=0&pageSize=10&sort=title' -d '{
"someSearchFilter1":"filterValue1",
"someSearchFilter2":"filterValue2",
"someSearchFilterList": ["filterValue3","xxx"]
... a lot more ...
}
'
が、それはあなたに罰金に見えるのか?上記の考慮事項に基づきます。
一つのリスクはクライアントライブラリは、ペイロードがGEに送信することを許可しないことになります行くようにTリクエスト。私はあなたがカールで正直にこれを行うことができることを理解していませんでした。 – bdkosher