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

标签 json api rest get

我不想在 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 ,您可以拥有一个与您的应用程序实现分离的中间件,并相应地重写该方法。如果您是纯粹主义者,这是最好的选择。

关于json - 对于 Restful API,GET 方法可以使用 json 数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29571284/

相关文章:

java - 无法将 JSONObjects 添加到数组中

windows - Cakephp - 使用 Folder::cd() 更改目录(绝对 Windows 路径)不起作用

node.js - 在 NodeJS 应用程序中存储远程 API 的身份验证 token 的最佳方法是什么?

rest - 在Spring Boot API上实现JWT身份验证

javascript - 删除功能不起作用angularjs

javascript - 请求头字段不允许授权(AngularJS Rest api 请求)

java - 从 JSON Schema 动态创建 Swing GUI(使用 Metawidget)

arrays - 在JSON数组中搜索数据,并在grails中放入数组列表

javascript - 使用 Dimple.js 渲染图表时出现问题

ruby-on-rails - 对 HTTP POST 参数命名约定的偏好?