当我有一个(长)项目列表想要发布到服务器时,我正在寻找如何序列化数据的约定。
例如,如果我有一个资源/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 处理,或者甚至不是基于 Web 的客户端)
如果您有一个足够复杂的客户端,您可以只构造一个 JSON 字符串并使用内容类型的 POSTapplication/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
}
但是,您随后必须处理这样的问题:如果一个列表比另一个列表短/长,您如何解决这个问题?如果创建用户列表需要一个新字段或一个可选字段,会发生什么情况? (但正如我最初提到的,JSON 对象的 JSON 数组可以解决这个问题...有许多库支持 JAX-RS 中的自动 JSON 反序列化,或者也可以选择创建自己的消息体读取器.
(下一节的免责声明:我不了解 Rails,我的经验更多是在 Java 服务领域......我的基础是本指南)。看起来 Rails 有一个约定name[]=foo&name[]=bar
自动将发布的数据处理到数组中,并采用类似的约定来填充结构,例如user[name]=foo&user[age]=20
...如果您在轨道上,也许有某种方法可以使用/滥用这两个功能来获得所需的结果?
其他 REST 框架和语言可能有自己的约定和功能:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)