JSON与formpost

JSON与formpost,json,rest,post,http-post,Json,Rest,Post,Http Post,我们正在讨论将数据发布到REST端点的问题。由于对象非常复杂,最简单的解决方案是将它们序列化为JSON并在请求体中发送 现在的问题是:这是犹太教吗?还是应该将JSON设置为像data=[JSON]这样的表单参数?还是在请求体中发送JSON只是因为强迫使用应用程序的客户端通过JavaScript发送数据而不让浏览器将其打包为application/x-www-form-urlencoded 我知道这三种选择都有效。但是哪一个是可以的呢?或者至少是推荐的?我认为这两种方法都很有效 在API中保持一致

我们正在讨论将数据发布到REST端点的问题。由于对象非常复杂,最简单的解决方案是将它们序列化为JSON并在请求体中发送

现在的问题是:这是犹太教吗?还是应该将JSON设置为像data=[JSON]这样的表单参数?还是在请求体中发送JSON只是因为强迫使用应用程序的客户端通过JavaScript发送数据而不让浏览器将其打包为
application/x-www-form-urlencoded


我知道这三种选择都有效。但是哪一个是可以的呢?或者至少是推荐的?

我认为这两种方法都很有效 在API中保持一致是很重要的。我个人选择的选项只是将内容作为
application/json
发送


POST
不会强迫你使用
application/x-www-form-urlencoded
——它只是被大量使用的东西,因为它是网络浏览器使用的东西。

直接以序列化JSON的形式发送它并没有什么错,例如谷歌默认在它的
volley
库中这样做(这显然是他们推荐的android REST库)

事实上,关于如何不使用JSON,而是通过截击执行“正常”的POST请求,还有很多问题。对于初学者来说,这有点违反直觉,必须覆盖它的基类“
getParams()
方法


但是默认情况下,谷歌有自己的REST库来做这件事,这将是我的指标。你可以使用JSON作为请求数据的一部分,因为OP已经声明这三个选项都有效

OP需要支持JSON输入,因为它必须支持包含复杂的结构内容。但是,请这样想……您是在请求执行某项操作,还是只是发送基本上是文档数据的内容,而您恰好使用了
POST
操作,相当于创建新条目

在这种情况下,您所拥有的基本上是一个具有CRUDL语义的资源端点。接下来,您实际上不限于
application/json
,而是资源端点应该处理的任何类型

对于非资源终结点 我发现(特别是对于JAX-RS而言,
应用程序/x-www-urlencoded
一个更好

  • 与OAuth 2.0和OpenID Connect保持一致,它们使用
    application/x-www-urlencoded
  • 使用Swagger注释更容易注释各个字段
  • Swagger提供了更多默认值
  • 邮递员会生成一个很好的表单供您填写,并使测试更容易
  • 非资源端点的示例:

    • 认证
    • 授权书
    • 简单搜索(尽管我会在这一次使用
      GET
    • 有许多条件的非简单搜索
    • 发送消息/文档(虽然我也会考虑<代码>多部分/表单数据< /代码>,这样我就可以把元数据和内容一起传递,但是JAX-RS没有一个标准,这一个球衣和ReStasy有他们自己的实现)
    我对这次讨论的结果很感兴趣。有什么更新吗?我目前的理解是,JSON内容应该作为POST数据的一部分传递,任何可选参数仍然可以作为URL参数的一部分发送。这就是twitter REST API实现它的方式。只是作为参考。大多数web浏览器使用
    application/x-www-form-urlencoded
    相对于
    application/json
    ?在我看来,
    application/json
    更灵活、更具表现力。