如何使用swagger-codegen生成的cpprest客户端库代码?
使用Swagger-Codegen生成的Cpprest客户端调用API指南
我来帮你梳理下cpprest版swagger客户端的使用流程,其实核心就是把配置好的ApiClient传给Api对象,然后处理异步回调或者同步返回结果~
首先先确认你已经正确初始化了ApiConfiguration和ApiClient,这是基础:
#include "ApiClient.h" #include "ApiConfiguration.h" #include "DefaultApi.h" // 1. 初始化API配置 std::shared_ptr<ApiConfiguration> config = std::make_shared<ApiConfiguration>(); config->setBaseUrl("https://your-api-base-url.com"); // 替换成你的API实际地址 // 如果需要认证,比如API Key或者Bearer Token,在这里配置 // config->setApiKey("X-API-Key", "your-api-key-value"); // config->setAccessToken("your-bearer-token"); // 2. 初始化ApiClient,把配置传进去 std::shared_ptr<ApiClient> apiClient = std::make_shared<ApiClient>(config);
接下来就是关键的DefaultApi调用部分,cpprest客户端支持同步调用和异步回调两种方式,我分别给你举实际例子:
方式一:同步调用(阻塞式)
如果你的应用场景允许阻塞等待结果,可以直接调用不带Async后缀的同步方法:
// 初始化DefaultApi对象,传入配置好的ApiClient std::shared_ptr<DefaultApi> defaultApi = std::make_shared<DefaultApi>(apiClient); try { // 调用getXXX方法,替换成你实际的API方法名(比如getUsers、getOrderById) // 这里假设getXXX需要一个路径参数id,根据你的Swagger Spec调整参数列表 auto response = defaultApi->getXXX("target-id-123"); // 处理返回结果,生成的模型类自带toJson()方法可以序列化为JSON字符串 std::cout << "API调用成功,返回数据:" << response->toJson().serialize() << std::endl; } catch (const std::exception& e) { // 捕获调用过程中的异常,比如网络错误、API返回错误码等 std::cerr << "API调用失败:" << e.what() << std::endl; }
方式二:异步调用(非阻塞式)
cpprest基于PPL实现异步逻辑,适合需要非阻塞的场景,方法名通常带Async后缀,需要传入回调函数处理结果:
// 初始化DefaultApi对象 std::shared_ptr<DefaultApi> defaultApi = std::make_shared<DefaultApi>(apiClient); // 调用异步版本的getXXXAsync方法 defaultApi->getXXXAsync( "target-id-123", // API需要的参数 [](const std::shared_ptr<XXXResponse>& response, const std::error_code& ec) { if (!ec) { // 调用成功,处理返回结果 std::cout << "异步API调用成功,返回数据:" << response->toJson().serialize() << std::endl; } else { // 调用失败,处理错误信息 std::cerr << "异步API调用失败:" << ec.message() << std::endl; } } ); // 注意:异步调用不会阻塞当前线程,如果是控制台程序,需要等待回调执行完成 // 实际项目中可以根据业务逻辑用PPL的task等待,或者让主线程保持运行 concurrency::wait(5000); // 临时等待5秒,确保回调执行完毕
几个关键注意点
- 参数匹配:一定要严格按照你的Swagger Spec定义的
getXXX方法参数列表传参,比如路径参数、查询参数、请求体等,生成的代码参数都是和API一一对应的。 - 异常/错误处理:同步调用会抛出
std::exception子类(比如生成的ApiException),异步调用则通过std::error_code返回错误状态。 - 模型对象操作:生成的返回模型类都自带
toJson()和fromJson()方法,方便和JSON字符串互相转换。 - 认证配置:如果你的API需要认证,一定要在
ApiConfiguration里正确设置,生成的代码会自动把认证信息加到请求头中。
这样应该就能顺利调用生成的API方法啦,你可以根据自己的业务场景选择同步或异步方式~
内容的提问来源于stack exchange,提问作者Jay Koutavas
相关产品推荐
相关产品推荐

