我们正在讨论将数据发布到REST端点的问题。由于对象非常复杂,最简单的解决方案是将它们序列化为JSON并在请求体中发送。
现在的问题是:这是犹太人吗?或者是否应将JSON设置为表格参数,如data = [JSON]?或者是在请求体中发送JSON,因为强迫客户使用该应用程序,通过JavaScript发送数据而不是让浏览器将其打包为application/x-www-form-urlencoded
?
我知道所有三个选项工作。但哪些确定?或者至少推荐?
答案 0 :(得分:24)
我会说这两种方法都能很好地运作
在API中保持一致非常重要。我个人选择的选项只是将内容发送为application/json
。
POST
并没有强迫您使用application/x-www-form-urlencoded
- 这只是一些经常被使用的东西,因为它是webbrowsers使用的东西。
答案 1 :(得分:5)
直接将其作为序列化JSON发送没有任何问题,例如谷歌默认在其volley
库(显然是他们的推荐)用于android的REST库。
事实上,关于不如何使用JSON,而是使用volley执行“正常”POST请求,有很多问题。这对初学者来说有点直观,不得不覆盖它的基类'getParams()
方法。
但谷歌默认情况下拥有自己的REST库,这将是我的指标 OK 。
答案 2 :(得分:2)
您可以使用JSON作为请求数据的一部分,因为OP已声明所有三个选项都有效。
OP需要支持JSON输入,因为它必须支持包含复杂的结构内容。但是,按照这种方式考虑......你是在提出做某事的请求,还是只是发送基本上是文档的数据而你恰好使用POST
操作作为相当于创建新条目。
在这种情况下,您所拥有的基本上是具有CRUDL语义的资源端点。接下来,您实际上不仅限于application/json
,而是资源端点应该处理的任何类型。
我发现(特别是对于JAX-RS)application/x-www-urlencoded
更好。
application/x-www-urlencoded
。非资源端点的示例:
GET
)multipart/form-data
所以我可以传递元数据和内容,但是JAX-RS没有这个版本的标准,而Jersey和RestEasy都有自己的实现)