我正在寻找一个关于如何序列化我的数据的约定,当我有一个(长)项目列表,我想要POST到服务器.
例如,如果我有一个资源,/users并且我想向它发布一个新资源,我会对新用户的字段进行http编码,并将其放在请求体中,如下所示:name=foo&age=20
但是,如果我有一个用户列表,像这样[{ name: 'foo', age: 20 }, { name: 'bar', age: 10 }],是否有传统的POST方式?
我在想,name[0]=foo&age[0]=20&name[1]=bar&age[1]=10但我找不到任何支持它的东西.Web服务器通常接受/期望什么?
可能会改变我的答案的快速问题:你是直接从HTML表单发帖还是期待更复杂的东西(例如javascript processsing,甚至不是基于web的客户端)
如果你有一个足够复杂的客户端,你可以构造一个JSON字符串和一个内容类型为的POST application/json.然后,无论处理什么资源,POST都可以使用任意数量的json库来读取已发布的字符串并按原样处理.
您使用什么框架/语言来构建REST服务?他们有内置的功能/惯例来帮助您吗?
例如,如果您使用JAX-RS来构建服务,则会有一个内置注释@FormParam,可用于处理已发布的表单...例如:如果您发布了以下内容类型为application/x-www-form-urlencoded:name=foo&age=20&name=bar&age=10
您可以通过以下方式检索服务端的并行列表:
@POST
@Consumes("application/x-www-form-urlencoded")
public void createUsers(@FormParam("name") List<String> name, @FormParam("age") List<String> age) {
// Store your users
}
Run Code Online (Sandbox Code Playgroud)
但是你必须处理如果一个列表比另一个更短/更长的问题,你如何解决?如果创建用户列表需要或可选的新字段会发生什么?(但正如我最初提到的,JSON对象的JSON数组将解决该问题......有许多库支持JAX-RS中的自动JSON反序列化,或者还有创建自己的MessageBodyReader的选项.
(关于下一部分的免责声明:我不知道rails,我在Java服务领域的经验更多......我的基础是本指南).看起来Rails有一个name[]=foo&name[]=bar将发布的数据自动处理成数组的惯例,以及类似于填充结构的约定user[name]=foo&user[age]=20......也许如果你在轨道上有一些方法来使用/滥用这两个功能来获得所需的结果?
其他REST框架和语言可能有自己的约定和功能:)
| 归档时间: |
|
| 查看次数: |
20661 次 |
| 最近记录: |