REST 服务的架构?
Schema for REST Service?
我有一个小型 REST 服务(使用 spring 制作),现在我正在寻找一种解决方案来自动为此服务生成模式。
在我的研究过程中,我发现了 类 RepositorySchemaController
和 PersistentEntityToJsonSchemaConverter
的一些线索。但我只想为我的 REST 服务生成一个 JSON 模式。为什么我需要 spring 数据?在这种情况下,我没有使用任何类型的持久性。
此外,我正在寻找一个易于理解的示例来做到这一点。
按模式,我猜你指的是模式元数据,即所有端点、交换的有效负载结构、路径变量、查询参数。
事实上,有一些格式提供了关于这个问题的结构:
- Swagger2 - 参见 http://swagger.io/。此外,它还附带一些工具,用于以图形方式显示 RESTful 服务的文档,并生成客户端 SDK 和服务器框架。
- RAML - 参见 http://raml.org/。它还带有一个可视化编辑器。
我认为您应该为您的服务提供一种(或两种)格式的内容"schema"。
我看到了两种方法:
静态一个 - 您通过内省源代码生成内容。您可以检测带有注释 Controller
的 classes,内省 classes 以找出带有注释 RequestMapping
的方法,获取参数并 returned classes 来确定有效负载结构,等等... Spring 提供了根据特定注释从 classpath 中查找的支持。有关详细信息,请参阅此 link:Scanning Java annotations at runtime。
我认为这种方法是可以接受的,因为当你更新资源或负载结构时,你需要重新启动你的应用程序,这样你就可以重新生成你的"schema"。
基于此生成的内容,您可以添加特定的 Spring 控制器来为其提供服务。你可以在这个文件上注入一个 Spring Resource
(classpath one).
动态一个(在运行时) - Spring 为您提供一个包含所有这些提示的 class RequestMappingHandlerMapping
.您可以将其注入 "schema" 控制器并使用方法 RequestMappingHandlerMapping#getHandlerMethods
的 return 来构建内容。有关详细信息,请参阅此 link:How to find all controllers in Spring MVC?.
您会注意到 APISpark(请参阅本教程 http://restlet.com/technical-resources/apispark/tutorials/document-restlet-api)为 Restlet 应用程序提供了这种内省机制。这样就在APISpark平台里面添加了一个WebAPI,然后就可以得到对应的Swagger2和RAML内容了。也许我们可以为 Spring MVC / REST 应用程序扩展它...
希望对你有帮助,
蒂埃里
我有一个小型 REST 服务(使用 spring 制作),现在我正在寻找一种解决方案来自动为此服务生成模式。
在我的研究过程中,我发现了 类 RepositorySchemaController
和 PersistentEntityToJsonSchemaConverter
的一些线索。但我只想为我的 REST 服务生成一个 JSON 模式。为什么我需要 spring 数据?在这种情况下,我没有使用任何类型的持久性。
此外,我正在寻找一个易于理解的示例来做到这一点。
按模式,我猜你指的是模式元数据,即所有端点、交换的有效负载结构、路径变量、查询参数。
事实上,有一些格式提供了关于这个问题的结构:
- Swagger2 - 参见 http://swagger.io/。此外,它还附带一些工具,用于以图形方式显示 RESTful 服务的文档,并生成客户端 SDK 和服务器框架。
- RAML - 参见 http://raml.org/。它还带有一个可视化编辑器。
我认为您应该为您的服务提供一种(或两种)格式的内容"schema"。
我看到了两种方法:
静态一个 - 您通过内省源代码生成内容。您可以检测带有注释
Controller
的 classes,内省 classes 以找出带有注释RequestMapping
的方法,获取参数并 returned classes 来确定有效负载结构,等等... Spring 提供了根据特定注释从 classpath 中查找的支持。有关详细信息,请参阅此 link:Scanning Java annotations at runtime。我认为这种方法是可以接受的,因为当你更新资源或负载结构时,你需要重新启动你的应用程序,这样你就可以重新生成你的"schema"。
基于此生成的内容,您可以添加特定的 Spring 控制器来为其提供服务。你可以在这个文件上注入一个 Spring
Resource
(classpath one).动态一个(在运行时) - Spring 为您提供一个包含所有这些提示的 class
RequestMappingHandlerMapping
.您可以将其注入 "schema" 控制器并使用方法RequestMappingHandlerMapping#getHandlerMethods
的 return 来构建内容。有关详细信息,请参阅此 link:How to find all controllers in Spring MVC?.
您会注意到 APISpark(请参阅本教程 http://restlet.com/technical-resources/apispark/tutorials/document-restlet-api)为 Restlet 应用程序提供了这种内省机制。这样就在APISpark平台里面添加了一个WebAPI,然后就可以得到对应的Swagger2和RAML内容了。也许我们可以为 Spring MVC / REST 应用程序扩展它...
希望对你有帮助, 蒂埃里