我在不同的地方看到两种类型的例子。一个使用像
这样的表单字段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内容具有更完整的优点,但是确定客户端实际修改哪个字段的开销的缺点(假设他们通过少量修改发送回整个资源)。
是否有最佳做法,甚至是更常见的做法?
答案 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,以及新的值。