我有openapi 3.0规范。 生成代码:
java -jar /usr/bin/swagger-codegen-cli-v3.jar generate -l java -i openapi_shop.yaml -o apishop -DhideGenerationTimestamp=true -c config_shop.json
如果现在在 1 个服务中我想调用该 api,我需要执行以下操作:
String accessToken = getUserAccessToken();
api.getApiClient().setAccessToken(accessToken);
Products response = api.productsGet();
但是正如您所看到的,如果 50 个用户同时开始 ping 该 api 会怎样?它最终会在那里混合访问令牌。 使用自动生成的客户端的正确方法是什么? 我看到有 2 个选项:
修改现有的自动生成代码,并在每个方法中将 token 作为参数,并将其简单地放在最后的 headers 中,如 json body
每次为每个用户的请求创建新实例(这听起来不太好)
也许我错过了什么?谢谢!
建议为每个请求创建ApiClient。如果您重用底层使用的客户端实现(例如 webclient 实例),那么它对性能的影响并不那么显着
GitHub 存储库中的示例提到了此建议
建议在多线程环境中为每个线程创建一个 ApiClient 实例,以避免任何潜在问题。
https://github.com/swagger-api/swagger-codegen/tree/master/samples/client/petstore/java/retrofit2rx
更新:我在这里用代码示例更详细地解释了它 - https://blog.ideaharbour.site/engineering/2024/03/16/how-to-relay-access-token-on-multi-threaded -openapi-generator-client/