这实际上是一个设计问题。我想知道携带 JSON 有效负载的 Spring3.0 REST Web 服务是否提供某种类似于遵循契约优先设计的传统 Web 服务的数据契约。我知道 JSON 具有类似于 XSD 的模式,但它在哪里适合春天?背景:我考虑使用 json 作为客户端服务器架构项目的有效负载,其中客户端是基于 .NET 的应用程序,数据合约应该提供一种处理客户端多个版本的方法。客户端应该能够将数据结构发布到服务器。或者也许我应该采用无模式的方法并使用类似于 XmlAnyElement 的“简单数据绑定”?
3 回答
与“常规”Web 服务的“合同”在 WSDL 文件(包括 XSD)中定义。对于 RESTful 服务,这些文件称为WADL。而且 spring-mvc 不支持生成 WADL。(JAX-RS 实现有)。
但即使这样做,RESTful 服务也被认为更“动态”,它们不需要像那样修复。例如,看看 Facebook 和 twitter 的 REST API。它们不提供 WADL 或 JSON 模式。他们提供了一些关于其服务的自由格式文档。这应该足够了。
如果客户端应该能够模拟服务以对客户端进行单元测试(实际上他们应该),那么服务应该提供合同。自由形式的文档不是测试的可靠基础,因为它留下了误解的空间,而合同则没有。
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 客户端。它通过使用 OPTIONS 方法解析在给定资源端点提供的模式,使用 Angular 动态构建 HTML 客户端应用程序。
https://github.com/bpanahij/passportedu_schema/tree/master/client