【发布时间】:2015-03-30 09:26:41
【问题描述】:
有没有办法让 Restlet Swagger 扩展限制它显示的 API?
我们拥有的 API 中有一些路径不应该被公开(目前还),确保至少只公开特定的 org.restlet.routing.Router 的策略是什么?因为我们在应用程序中有很多Routers。
【问题讨论】:
标签: java google-app-engine restlet swagger
有没有办法让 Restlet Swagger 扩展限制它显示的 API?
我们拥有的 API 中有一些路径不应该被公开(目前还),确保至少只公开特定的 org.restlet.routing.Router 的策略是什么?因为我们在应用程序中有很多Routers。
【问题讨论】:
标签: java google-app-engine restlet swagger
这是不可能的。更简单的方法是 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;
}
希望对你有帮助 蒂埃里
【讨论】: