【问题标题】:Is there a way to make Restlet Swagger extension limit the API it shows?有没有办法让 Restlet Swagger 扩展限制它显示的 API?
【发布时间】:2015-03-30 09:26:41
【问题描述】:

有没有办法让 Restlet Swagger 扩展限制它显示的 API?

我们拥有的 API 中有一些路径不应该被公开(目前还),确保至少只公开特定的 org.restlet.routing.Router 的策略是什么?因为我们在应用程序中有很多Routers。

【问题讨论】:

    标签: java google-app-engine restlet swagger


    【解决方案1】:

    这是不可能的。更简单的方法是 IMO 修补扩展 org.restlet.extension.swagger

    • 更新类SwaggerSpecificationRestlet的方法getSwagger以允许更新自省定义过滤,如下所述:

      public Representation getSwagger() {
          Definition definition = getDefinition();
          // The method to add for filtering the instropected structure
          filterDefinition(definition);
          Swagger swagger = Swagger2Translator.getSwagger(definition);
          (...)
      }
      
      protected void filterDefinition(Definition definition) {
      }
      
    • 在您的应用程序中,通过覆盖方法 getSwaggerSpecificationRestlet 来配置此类:

      public SwaggerSpecificationRestlet getSwaggerSpecificationRestlet(
                       Context context) {
          SwaggerSpecificationRestlet result
                     = new SwaggerSpecificationRestlet(this) {
              protected void filterDefinition(Definition definition) {
                  (...)
              }
          };
          result.setApiInboundRoot(this);
          return result;
      }
      

    这是filterDefinition方法的示例:

    private Definition filterDefinition(Definition definition) {
        List<Resource> resourcesToRemove = new ArrayList<>();
        Contract contract = definition.getContract();
        for (Resource resource : contract.getResources()) {
            resourcesToRemove.add(resource);
        }
    
        for (Resource resource : resourcesToRemove) {
            contract.getResources().remove(resource);
        }
    
        return definition;
    }
    

    希望对你有帮助 蒂埃里

    【讨论】:

    • SwaggerSpecificationRestlet 类中没有 getSwagger() 方法?版本 2.3.1
    • 我尝试在我的代码中添加日志,唯一被触发的是 getSwaggerSpecificationRestlet() 方法而不是 filterDefinition() 请参阅pastekit.com/n5l5DD 这是因为 getSwagger() 没有被覆盖?但是我找不到那个方法...
    猜你喜欢
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    相关资源
    最近更新 更多