我有一个包含以下代码段的 OpenAPI 规范文档(我无法控制):
servers:
- url: http://www.[someservice].com/api
Run Code Online (Sandbox Code Playgroud)
我正在使用这个 OpenAPI 文档来生成我在我的 Angular SPA 中使用的 typescript-angular 客户端。当我在生产中运行它时,这很好用(我的 api 后端可以通过提供的 url 访问)。
我想使用http://localhost:1234/api进行本地测试。如何使用 openapi-generator 覆盖基本路径,以便我可以生成在本地工作的客户端代码?
小智 9
可以通过 Configuration 实例为服务器 url 配置生成的 Angular 客户端。以下是我们的 app.module.ts 的摘录,让客户端通过客户端服务 url 调用服务器(您应该能够为您的值定义 basePath):
@NgModule({
declarations: [...],
imports: [
...
ApiModule.forRoot(() => {
return new Configuration({
basePath: ``,
});
}),
...
],
...
bootstrap: [AppComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
直到他们将其放入文档中,如果您使用 openapi-generator Maven 插件,则该概念被称为server variables- 它记录在此处并传递给 CLI 生成器,如下所示:
Run Code Online (Sandbox Code Playgroud)--server-variables <server variables> sets server variables overrides for spec documents which support variable templating of servers.
例如(我从相应的功能拉取请求中获取了示例):
openapi-generator generate -g java -i myproject/myapi.json -o myproject/generated --server-variables=host=myhost.com,basePath=myapi
Run Code Online (Sandbox Code Playgroud)
上面的内容可以适应 myapi.json(我们 API 的规范)包含以下内容的情况:
...
"servers": [
{
"url": "https://{host}/{basePath}/v1/",
"variables": {
"host": {
"default": "service.domain.org"
},
"basePath": {
"default": "mythings"
}
}
}
],
...
Run Code Online (Sandbox Code Playgroud)
在这种情况下,生成的 ApiClient.java 将包含以下内容:
private String basePath = "https://myhost.com/myapi/v1";
Run Code Online (Sandbox Code Playgroud)
我实际上还没有尝试过上面的内容并将其作为示例进行组装。我在工作示例中尝试的是按以下方式使用 openapi-generator-maven-plugin (请参阅 参考资料serverVariableOverrides):
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>5.4.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/myapi.json</inputSpec>
<generatorName>java</generatorName>
<library>resttemplate</library>
<apiPackage>com.mycompany.myapi.client.generated.api</apiPackage>
<modelPackage>com.mycompany.myapi.client.generated.model</modelPackage>
<invokerPackage>com.mycompany.myapi.client.generated.invoker</invokerPackage>
<configOptions>
<dateLibrary>java8</dateLibrary> <!-- otherwise we have a problem, threetenbp has to be used -->
</configOptions>
<serverVariableOverrides>host=myhost.com,basePath=myapi</serverVariableOverrides>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |