REST服务的架构?

时间:2015-03-22 22:40:55

标签: spring rest jsonschema

我有一个小型REST服务(由spring制作),现在我正在寻找一种自动为此服务生成模式的解决方案。

在我的研究过程中,我发现了一些类RepositorySchemaControllerPersistentEntityToJsonSchemaConverter的提示。但我只想生成我的REST服务的JSON模式。为什么我需要弹簧数据呢?在这种情况下,我没有使用任何持久性。

此外,我正在寻找一个可理解的例子来做到这一点。

1 个答案:

答案 0 :(得分:2)

通过模式,我猜你的意思是模式的元数据,即所有端点,交换的有效负载结构,路径变量,查询参数。

事实上,有一些格式可以提供有关此问题的结构:

  • Swagger2 - 请参阅http://swagger.io/。此外,还提供了一些工具,用于以图形方式显示RESTful服务的文档,并生成客户端SDK和服务器框架。
  • RAML - 请参阅http://raml.org/。它还附带一个可视化编辑器。

我认为您应该为您的服务“架构”提供一种(或两种)格式的内容。

我看到两种方法:

  • 静态 - 您可以通过内省源代码来生成内容。您可以检测带注释Controller的类,内省类以查找带注释RequestMapping的方法,获取参数和返回类以确定有效负载结构等等... Spring提供了一个支持来查找来自基于特定注释的类路径。有关详细信息,请参阅此链接:Scanning Java annotations at runtime

    我认为这种方法是可以接受的,因为当您更新资源或有效负载结构时,需要重新启动应用程序,以便重新生成“模式”。

    根据生成的内容,您可以添加特定的Spring控制器来为其提供服务。您可以在此文件上注入Spring Resource(类路径一)。

  • 动态(运行时) - Spring为您提供包含所有这些提示的类RequestMappingHandlerMapping。您可以在“模式”控制器中注入它,并使用方法RequestMappingHandlerMapping#getHandlerMethods的返回来构建内容。有关详细信息,请参阅此链接:How to find all controllers in Spring MVC?

您可以注意到APISpark(参见本教程http://restlet.com/technical-resources/apispark/tutorials/document-restlet-api)为Restlet应用程序提供了这样的内省机制。这在APISpark平台中添加了一个Web API,然后您就可以获得相应的Swagger2和RAML内容。也许我们可以为Spring MVC / REST应用程序扩展它......

希望它可以帮到你, 亨利