有没有办法让 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;
}
希望对你有帮助,
蒂埃里
有没有办法让 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) { }
在您的应用程序中,通过覆盖
方法来配置此 classgetSwaggerSpecificationRestlet
: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;
}
希望对你有帮助, 蒂埃里