gpt4 book ai didi

java - GET HTTP 请求负载

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:31 25 4
gpt4 key购买 nike

我正在设计一个 API,我想知道在 GET 请求中发送 JSON 负载是否合适?

在另一个问题中 Payloads of HTTP Request Methods ,我们可以根据this link找到:

  • HEAD - 没有定义主体语义。
  • GET - 没有定义正文语义。
  • PUT - body 支持。
  • 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" }
}
}
}
}
'

因此,如果这个流行的图书馆这样做并且没有人提示,那么也许我也可以这样做?

顺便说一下,我想知道混合使用 queryString 参数和 JSON 负载是否可行?就像这个 ElasticSearch 查询一样。如果是这样,是否有规则让我们知道哪些参数应该是 queryString 参数,或者 payload 参数?


在这里我们可以阅读: HTTP GET with request body

Roy Fielding's comment about including a body with a GET request.

Yes. In other words, any HTTP request message is allowed to contain amessage body, and thus must parse messages with that in mind. Serversemantics for GET, however, are restricted such that a body, if any,has no semantic meaning to the request. The requirements on parsingare separate from the requirements on method semantics.

So, yes, you can send a body with GET, and no, it is never useful todo so.

This is part of the layered design of HTTP/1.1 that will become clearagain once the spec is partitioned (work in progress).

....Roy

然后我真的不明白为什么它从来没有用,因为在我看来,向服务器发送不适合 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 ...
}
'

您觉得还好吗?基于以上考虑。


最佳答案

让 GET 响应因请求正文而异会破坏缓存。不要去那里。

关于java - GET HTTP 请求负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16360351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com