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