我正在設計一個API,我想知道是否可以在GET請求上發送JSON有效載荷?GET HTTP請求有效載荷
在此的其他問題Payloads of HTTP Request Methods,我們可以根據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參數或有效負載參數?
在這裏,我們可以讀到: HTTP GET with request body
Roy Fielding的關於包括機身採用了GET請求評論。
是的。換句話說,任何HTTP請求消息都被允許包含消息體,因此必須在解析消息時考慮到這一點。然而,GET的服務器 語義受到限制,使得主體(如果有的話)對請求沒有語義含義。解析 的要求與方法語義的要求是分開的。
所以,是的,你可以用GET發送一個正文,不,這對於 這樣做是沒有用的。
這是HTTP/1.1分層設計的一部分,一旦規範分區(工作正在進行),它將再次變得清晰 。
....羅伊
然後,我真的不明白爲什麼它從來都不是有用的,因爲它是有道理的,我認爲,以複雜的查詢發送到不會對queryParam合身服務器或者matrixParam。 我覺得ElasticSearch API設計者想的一樣......
我打算設計一個可以被稱爲這樣的一個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 2013-05-03 13:48:52