JSON RESTful Web服务是否应使用数据协定

时间:2010-12-17 10:06:33

标签: web-services json rest spring-mvc design-by-contract

这实际上是一个设计问题。 我想知道带有JSON有效负载的Spring3.0 REST Web服务是否提供了类似于遵循契约优先设计的传统Web服务的某种数据协定。 我知道JSON的架构类似于XSD,但它在春天适用于哪里? 背景: 我考虑使用json作为客户端服务器体系结构项目的有效负载,其中客户端是基于.NET的应用程序,数据协定应提供处理客户端的多个版本的方法。客户端应该能够将数据结构发布到服务器。 或许我应该采用无模式方法并使用"简单数据绑定"这与XmlAnyElement类似?

3 个答案:

答案 0 :(得分:5)

“常规”Web服务的“合同”在WSDL文件(包括XSD)中定义。使用RESTful服务,这些文件称为WADL。而spring-mvc不支持生成WADL。 (JAX-RS实现)。

但即使这样,RESTful服务也被认为更“动态”,并且不需要像这样修复它们。例如,看看Facebook和Twitter的REST API。它们不提供WADL或JSON模式。他们提供了一些自由形式的服务文档。这应该足够了。

答案 1 :(得分:5)

如果客户端应该能够模拟客户端(实际上他们应该)进行单元测试的服务,那么服务应该提供合同。自由格式文档不是测试的可靠基础,因为它会留下误解的空间,而合同则不会。

答案 2 :(得分:1)

JSON Schema和Hyper-Schema是用于指定内容和内容协商的JSON Schema格式。

我一直在使用JSON Hyper Schema开发HATEOAS(超媒体作为应用程序状态引擎)API。 您可以转到下面的URL,浏览,注册,登录并执行某些操作。

看看,这里: http://direct.psprt.com:8081/

到目前为止,我还开源了我的实际API代码: http://bpanahij.github.io/passportedu_schema/

随意查看,借阅和评论。

另外,请查看Javascript JSON-Hyper-Schema客户端。它使用Angular动态构建HTML客户端应用程序,方法是使用OPTIONS方法解析在给定资源端点提供的Schema。

https://github.com/bpanahij/passportedu_schema/tree/master/client