所以我使用Express(通过测试开发)在Node中完成了一个服务器,在开发我的前端时,我意识到Java在GET请求中不允许任何正文有效负载。我已经完成了一些阅读并理解Http规范允许这样做,但大多数情况下标准是不在GET中放置任何有效负载。所以如果不是这样,那么将它放入GET请求的最佳方法是什么。我包含的数据大多是简单的字段,除了在我的结构中,其中一些是嵌套的,其中一些是数组,这就是为什么发送JSON似乎很容易。我该怎么做呢?
例如,我有一个包含此数据的请求
createObject
答案 0 :(得分:1)
我已经完成了一些阅读,并了解Http规范允许这样做,但大多数情况下标准是不在GET中放置任何有效负载。
正确 - 问题在于没有定义的语义,这意味着即使您同时控制客户端和服务器,也不能指望参与讨论的中间人合作。见RFC-7231
我包含的数据大多是简单的字段,除了在我的结构中,其中一些是嵌套的,其中一些是数组,这就是为什么发送JSON似乎很容易。我该怎么做呢?
HTTP POST方法是将有效负载传递到资源的适当方法。 POST是HTTP词汇表中最常用的方法,它涵盖了所有用例,甚至包括其他案例所涵盖的用例。
您在POST中丢失的是请求为safe和idempotent,并且您没有获得任何体面的缓存行为。
另一方面,如果JSON文档用于约束资源返回的表示,那么说JSON是该文档的标识符的一部分是正确的。 ,在这种情况下,您将其编码为query
/some/hierarchical/part?{encoded json goes here}
这使您可以返回安全语义,支持缓存等。
当然,如果你的json结构很复杂,那么你可能会发现自己在URI length上遇到了各种隐式限制。
答案 1 :(得分:1)
我发现了一些有趣的GET规范,允许发布更复杂的对象(例如数组和内部属性的对象)。许多支持GET查询的框架似乎都在解析这个问题。
对于数组,重新定义该字段。例如,对于数组ids = [1,2,3]
test.com?ids=1&ids=2&ids=3
对于嵌套对象,例如
{
filter.id: 5,
filter.post: 2
}
test.com?filter[id]=5&filter[post]=2