我正在设计一个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