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

Is there a way to make Restlet Swagger extension limit the API it shows?

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

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

开箱即用是不可能的。更简单的方法是 IMO 修补扩展 org.restlet.extension.swagger:

  • 更新 class 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:

    方法来配置此 class
    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;
}

希望对你有帮助, 蒂埃里