鉴于此服务:
POST /hotel HTTP/1.1
<hotel>
<a>aaa</a>
<b>bbb</b>
<c>ccc</c>
</hotel>
HTTP/1.1 201 CREATED
Location: /hotel/123
当我们在服务器上处理请求时,我们将针对DTD验证请求中的hotel
XML。
问题是,作为REST最佳实践,客户端应该在请求中引用DTD(正如在基于DTD创建XML文档时通常所做的那样)?或者这不是必需的吗? DTD将在API文档中描述,因此客户端服务的编写者将了解DTD验证细节。
答案 0 :(得分:2)
据我所知,REST对POST主体的内容没有任何说法。
显然,您必须在服务器上验证XML,因此您可以做的最好是建议客户端在发送之前根据DTD验证XML,以节省时间和带宽。但是,你真的无法强制执行它。
我认为您作为服务作者的责任是接受请求是否涉及DTD,但这只是我的意见。
答案 1 :(得分:1)
好吧,如果请求正文未通过DTD检查,你当然可以吐回400 Bad Request
,但我不会要求DTD引用存在。您应该允许它被省略,如果它在那里则使用它,但如果它们指定了错误的DTD,我也会失败。当然,错误消息应该表明预期的DTD是什么。
如果省略DTD,您可能需要考虑跳过严格的一致性检查,因为它更像人们在设置软件时想要的东西,但出于性能原因,可能希望在它们之后关闭知道一切正常。