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

REST PUT方法的建议/有效请求有效负载是什么?,rest,Rest,我在不同的地方看到两种类型的例子。一个使用表单字段,如 curl-X PUT-d“phone=123.456.7890” 另一个使用XML内容,如(某些变体) echo“123123.456.7890”| curl-X PUT-d@“ 似乎使用表单字段的优点是简洁,通过只针对修改的字段,可以清楚地识别客户机的意图,但这会使处理“更深层”的元数据变得很困难 使用XML内容的优点是更完整,但缺点是计算出客户机实际修改的字段的开销(假设客户机只需稍加修改即可发回整个资源) 有没有最佳实践,或者更常见的

我在不同的地方看到两种类型的例子。一个使用表单字段,如

curl-X PUT-d“phone=123.456.7890”

另一个使用XML内容,如(某些变体)

echo“123123.456.7890”| curl-X PUT-d@“

似乎使用表单字段的优点是简洁,通过只针对修改的字段,可以清楚地识别客户机的意图,但这会使处理“更深层”的元数据变得很困难

使用XML内容的优点是更完整,但缺点是计算出客户机实际修改的字段的开销(假设客户机只需稍加修改即可发回整个资源)


有没有最佳实践,或者更常见的实践?

在第二个示例中,URL没有引用特定的资源,因此它不是RESTful

如果您解决了这个问题,那么选择将归结为表单和XML编码

如果您需要结构化和可扩展的数据,那么XML可能很有用:

<phone type="work, mobile"><num>555-555</num><ext>123</ext></phone>

许多API用户可能会错误地使用XML编码,难以掌握名称空间间接寻址,因此表单编码可能更适合广大用户。

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


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

它可能类似于JSON(p)?(我不确定确切的语法):

phone=555-555&phone-ext=123&phone-type=work&phone-type=mobile
$ 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'