如何验证REST请求?

时间:2009-10-27 17:47:52

标签: web-services rest dtd xml-validation

鉴于此服务:

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验证细节。

2 个答案:

答案 0 :(得分:2)

据我所知,REST对POST主体的内容没有任何说法。

显然,您必须在服务器上验证XML,因此您可以做的最好是建议客户端在发送之前根据DTD验证XML,以节省时间和带宽。但是,你真的无法强制执行它。

我认为您作为服务作者的责任是接受请求是否涉及DTD,但这只是我的意见。

答案 1 :(得分:1)

好吧,如果请求正文未通过DTD检查,你当然可以吐回400 Bad Request,但我不会要求DTD引用存在。您应该允许它被省略,如果它在那里则使用它,但如果它们指定了错误的DTD,我也会失败。当然,错误消息应该表明预期的DTD是什么。

如果省略DTD,您可能需要考虑跳过严格的一致性检查,因为它更像人们在设置软件时想要的东西,但出于性能原因,可能希望在它们之后关闭知道一切正常。