json - 对于 Restful API,GET 方法可以使用 json 数据吗?

我不想在 URI 中看到这么长的参数字符串。那么,GET方法可以使用json数据吗?

在我的情况下,我需要过滤给定参数的结果。如果参数很多,长度可能会超过 URI 的限制。那么,有没有解决这个问题的最佳实践?

最佳答案

理论上,没有什么能阻止您在 GET 中发送请求正文。要求。 HTTP 协议(protocol)允许这样做,但没有定义语义,因此由您来记录客户端发送 GET 时究竟会发生什么。有效载荷。例如,您必须定义 JSON 正文中的参数是否等同于查询字符串参数或完全等同于其他内容。

但是,由于没有明确定义的语义,您无法保证您的应用程序和客户端之间的实现会尊重它。服务器或代理可能会拒绝整个请求,或忽略正文或其他任何内容。处理中断实现的 REST 方法是以与您的应用程序分离的方式规避它,所以我想说您有两个可以被视为最佳实践的选项。

简单的选择是使用 POST而不是 GET正如其他答案所建议的那样。从 POST不是由 HTTP 标准化的,您必须记录它应该如何工作。

我更喜欢的另一个选择是假设 GET 来实现您的应用程序。有效载荷永远不会被篡改。然后,如果某些实现发生故障,您允许客户端使用 X-HTTP-Method-Override 覆盖 HTTP 方法。 header ,这是客户端使用 POST 模拟 HTTP 方法的流行约定.因此,如果客户端的实现有问题,它可以编写 GET请求为 POST ,发送X-HTTP-Method-Override: GET header ,您可以拥有一个与您的应用程序实现分离的中间件,并相应地重写该方法。如果您是纯粹主义者,这是最好的选择。

https://stackoverflow.com/questions/29571284/

相关文章:

java - @JsonUnwrapped 的 Jackson 反序列化等价物是什么?

json - 使用 HTTPie 发送嵌套的 JSON 对象

javascript - D3 - 如何处理 JSON 数据结构?

javascript - 是否可以通过适当的 JavaScript 字符串转义来利用 JSON 响应

javascript - 如何确定性地验证 JSON 对象是否未被修改?

javascript - JSON 对象的增量编码

c# - 在 asp.net 中将 JSON 转换为 .Net 对象时出错

java - 仅使用字符串和值解析 JSON 对象

java - gson 在自定义反序列化器中调用标准反序列化

java - 将 JSONObject 转换为 Map