REST服务是否应公开XSD以获取XML响应?

Luc*_*Bos 4 xml rest xsd web-services

我们构建了一个REST服务,它依赖于accept标头将XML或JSON返回给客户端,或者取决于content-type标头将接受XML或JSON.

现在,最近的集成商问我们是否有针对XML响应和请求的XSD架构.

这是开发REST服务时的常见做法吗?

kjh*_*hes 6

通常的做法是为任何服务的调用者(包括REST)提供某种形式的服务接口定义.如果您有XML接口,某种XML模式(XSD,RELAX NG,Schematron等)是定义请求 响应接口的好方法.除了提供文档之外,还可以通过验证解析器来捕获对声明的接口的违规.

您还可以考虑创建JSON接口的JSON模式定义.它可以提供与XML模式相同的一些好处,但是它可以说比XML模式的XML更常见.


Bri*_*ian 5

先前的答案是正确的,这是常见的做法。

但是,我建议这不是一个习惯。

使用xsd验证响应的坏事是您在客户端和服务器之间创建的紧密绑定。理想情况下,客户端应遵循宽容的阅读器模式(例如,参见http://martinfowler.com/bliki/TolerantReader.html)。客户端应该只需要它需要的数据,而不会不必要地失败。因此,如果服务器要开始发送额外的数据,或者无法发送不需要的数据,则客户端应该能够继续运行而不会产生投诉。客户端的域模型应仅表示客户端实际需要的数据。

早在SOAP的早期,客户端和服务器之间的这种紧密绑定被认为是可以的,甚至是好的,并在wsdl和xsd中进行了强制。REST体系结构应该促进松散耦合,并允许服务以尽可能小的影响发展。

仅在极少数情况下,使用xsd验证响应才是好方法。例如,当服务永远不会改变(它可能是一次性的数据迁移的一次性服务),或者当您认为可以将客户端和服务器域模型紧密绑定在一起(对于单位来说,这是可以的)测试)。一旦服务稳定,就可以为发布xsd争论不休,但是我认为这是非常困难的。

(尽管这仍然很普遍,但我发现它并不像以前那样普遍。上周我在与一家大型政府机构的建筑师交谈时,他们的标准是仅使用xpath来从中获取数据xml响应,并且永远不要使用基于xsd的域对象)