REST PUT方法的推荐/有效请求负载是什么?

5
我在各个地方看到两种示例。一种使用表单字段,例如:

curl -X PUT -d "phone=123.456.7890" "http://127.0.0.1/services/rest/user/123"

另一种使用 XML 内容,如以下(某些变体):

echo "<user><id>123</id><phone>123.456.7890</phone></user>" | curl -X PUT -d @- "http://127.0.0.1/services/rest/user/"

似乎使用表单字段具有简洁性和清晰地标识客户端意图的优点,因为只针对修改的字段进行定位,但是如果需要访问“更深层次”的元数据,则会变得复杂。
使用 XML 内容具有更完整的优点,但缺点是需要额外的开销来确定客户端实际修改的字段(假设他们发送带有小修改的整个资源)。

有最佳实践,甚至更常见的做法吗?

3个回答

2
这可能类似于JSON(P)吗?(我不确定具体的语法):
$ echo '{user: {id: 123, phone: 123.456.7890}}' |\
> curl -X PUT -d @- 'http://127.0.0.1/services/rest/user/'

或者

$ echo '{phone: 123.456.7890}' |\
> curl -X PUT -d @- 'http://127.0.0.1/services/rest/user/123.json'

0

好问题!我不知道有什么特定的最佳实践或常见做法。但是我想指出,这个问题实际上并不是关于表单字段或XML,而是关于部分表示和完整表示。你已经简洁地描述了它们之间的实际差异。问题的一个方面是谁负责确定发生了什么变化:客户端还是服务器。

一种混合选项是某种格式,其中客户端可以指定发生了什么确切的变化,使用一些语法来指向“更深层次”的元数据,例如XPath或JSONpath,以及新值。


0
在第二个示例中,URL 没有指向特定资源,所以在我看来它不是符合 RESTful 的标准。
如果你修复了这个问题,那么选择就在于表单和 XML 编码。
如果你需要结构化和可扩展的数据,那么 XML 可能会很有用:
<phone type="work, mobile"><num>555-555</num><ext>123</ext></phone>

但不是必要的:

phone=555-555&phone-ext=123&phone-type=work&phone-type=mobile

许多API用户可能会在XML编码方面出错,难以理解命名空间间接引用,因此表单编码可能更适合广大用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接