如何从控制器访问 REST API 的所有可用路由?

Posted

技术标签:

【中文标题】如何从控制器访问 REST API 的所有可用路由?【英文标题】:How to access all available routes of a REST API from a controller? 【发布时间】:2017-07-19 10:32:08 【问题描述】:

我正在使用 Spring Boot 创建一个 REST API,我想在用户向/help 或什至只是向服务器,即在我的情况下,因为我在本地工作,localhost:8080

我知道我可以在例如 Spring Boot 应用程序启动时在日志中看到可用路由,但我不确定如何从 Spring Boot 控制器访问这些路由。正如我所说,这些路由将作为 JSON 返回,类似于:



    routes: [
        "/api/users/create",
        "/api/users/list",
        ...
    ]


当然,提供额外的必要信息来向特定 URL 发出请求也会很好,例如如果客户端需要传递某些请求参数,哪些参数,以及以哪种格式。

例如,它会是以下形式:



    "routes" : [
        "route": /api/users/create", "requestParams": ["name", "age", ... ],
        ...
    ]


是的,我想通过这种方法向尝试使用我创建的 REST 服务的客户提供某种文档。

我该怎么做?至少有一种简单的方法可以访问路由吗?

这样做会有什么问题吗?如果有,是哪些?

【问题讨论】:

Spring boot 执行器通过/mappings 端点为您提供开箱即用的功能。查看here了解更多详情 @Bond-JavaBond 我还想提一下 Spring Boot 执行器(因为我已经在使用它了),据我了解,实际上应该在开发时实际使用它;例如,测试应用程序的状态。如果这是真的,那么它不被认为用于类似于我所描述的情况,但我可能是错的,因为我对执行器了解不多。 Actuator 不仅仅用于开发。没有理由不能在生产中使用它。 @DanielOlszewski 不管怎样,/mappings 没有提供我想展示的所有信息,比如所需的参数。此外,它显示不相关的信息。从控制器访问这些 JSON 并根据我们的需要修改它们最终会很好。有可能吗? 【参考方案1】:

您可以使用RequestMappingHandlerMapping

注入它:

@Autowired
public RequestMappingHandlerMapping requestMappingHandlerMapping;

然后:

@RequestMapping("/endpoints")
public @ResponseBody
Object showEndpointsAction() throws SQLException

        return requestMappingHandlerMapping.getHandlerMethods().keySet().stream().map(t ->
               (t.getMethodsCondition().getMethods().size() == 0 ? "GET" : t.getMethodsCondition().getMethods().toArray()[0]) + " " +                    
               t.getPatternsCondition().getPatterns().toArray()[0]
        ).toArray();
 

应列出所有端点 URL 路径。

【讨论】:

【参考方案2】:

您是否考虑使用 Swagger 为您的 API 提供文档的可能性?使用简单,带有一些注释,您将拥有完整的 API 文档。 Here 你有一个如何配置 Swagger 的指南。希望对你有帮助。

【讨论】:

以上是关于如何从控制器访问 REST API 的所有可用路由?的主要内容,如果未能解决你的问题,请参考以下文章

REST API访问控制从访问令牌和路径参数中提取主题

PHP Slim Framework REST API - 在每条路由之前验证访问令牌?

使用 JWT 和路由的 Express REST API

REST API 访问控制从访问令牌中提取主题与从路径参数中提取主题

如何在 Spring-Data-Rest 中实现细粒度的访问控制?

API Gateway 中控制和管理对 REST API 的访问