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

时间:2008-11-21 20:09:55

标签: rest

我在不同的地方看到两种类型的例子。一个使用像

这样的表单字段
  

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

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

  

echo“&lt; user&gt;&lt; id&gt; 123&lt; / id&gt;&lt; phone&gt; 123.456.7890&lt; / phone&gt;&lt; / user&gt;” | curl -X PUT -d @ - “http://127.0.0.1/services/rest/user/

似乎使用表单字段具有简洁的优点,并且仅通过仅修改已修改的字段来明确识别客户端的意图,但却难以解决“更深层次”的元数据。

使用XML内容具有更完整的优点,但是确定客户端实际修改哪个字段的开销的缺点(假设他们通过少量修改发送回整个资源)。

是否有最佳做法,甚至是更常见的做法?

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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编码,无法掌握命名空间间接,因此对于广泛的受众来说,表单编码可能会更好。

答案 2 :(得分:0)

好问题!我不知道具体的最佳做法或惯例。但我确实想指出问题不是关于表单字段或XML,而是关于部分表示与完整表示。你已经简洁地描述了它们之间的实际差异。问题的一个方面是谁有责任确定发生了哪些变化:客户端或服务器。

混合选项可以是某种格式,其中客户端可以指定完全已更改的内容,使用某种语法指向“更深层”的元数据,例如XPath或JSONpath,以及新的值。