我不想在 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/