経緯
作成に至った経緯・node.jsによるサーバー作成は以下の記事を参照
swagger-codegenでnode.jsのモックサーバー作成
今回はC++でクライアントを生成する。
環境構築
swagger.jsonから自動生成
node.jsのモックサーバー作成でwgetしたswagger.jsonでC++のクライアントを作成する。(yamlファイルでの生成も可能)
$ java -jar swagger-codegen-cli.jar generate -i swagger.json -l cpprest -o client
CMAKEによるビルド
生成されたディレクトリに移動するとソース群とCMakeLists.txtが生成されている。
cpprestのrootを設定する行がコメントアウトされているため、書き換える。
# build and set path to cpp rest sdk
#set(CPPREST_ROOT ${PROJECT_SOURCE_DIR}/../../../developmentTools/3rdParty/cpprest)
set(CPPREST_INCLUDE_DIR ${CPPREST_ROOT}/include)
set(CPPREST_LIBRARY_DIR ${CPPREST_ROOT}/lib)
↓
# build and set path to cpp rest sdk
set(CPPREST_ROOT ${PROJECT_SOURCE_DIR}/../../../developmentTools/3rdParty/cpprest)
set(CPPREST_INCLUDE_DIR ${CPPREST_ROOT}/include)
set(CPPREST_LIBRARY_DIR ${CPPREST_ROOT}/lib)
書き換えたらcmakeをインストール
$ sudo apt-get install cmake
ビルド用のディレクトリを作成して移動後、以下コマンド実施
$ cmake ..
cmakeが完了したらビルドする
$ cmake --build .
※cpprestパッケージがインストールされていないとビルドエラーとなるため、その場合は
sudo apt-get install libcpprest-dev
でインストールする
生成されたライブラリの移動
ビルドに成功すると、ソースファイルがあるディレクトリにlibディレクトリが作成されている。
その中にあるlibCppRestSwaggerClient.aを*/usr/lib*配下に移動する
テストコード作成
先ほど作成したAPIを実際に呼び出して実行するためのテストコードを作成する。
#include "api/PetApi.h"
using namespace io::swagger::client::api;
using namespace web::http::client;
int main(int argc, char* args[]) {
http_client_config config;
std::shared_ptr<ApiClient> apiClient(new ApiClient);
std::shared_ptr<ApiConfiguration> apiConfig(new ApiConfiguration);
apiConfig->setBaseUrl("http://localhost:8080/v2/");
apiConfig->setHttpConfig(config);
apiClient->setConfiguration(apiConfig);
PetApi api(apiClient);
api.getPetById(1).then([=](pplx::task<std::shared_ptr<Pet>> example) {
try{
std::cout << example.get()->getName() << '\n';
} catch(const std::exception& e) {
std::cout << "getExample() exception: " << e.what() << '\n';
}
}).wait();
}
コンパイラのインストールとコンパイル
テストコードをコンパイルするためにコンパイラをインストールする
以下のサイトを参考にした。
How to build for Linux
sudo apt-get install g++ git libboost-atomic-dev libboost-thread-dev libboost-system-dev libboost-date-time-dev libboost-regex-dev libboost-filesystem-dev libboost-random-dev libboost-chrono-dev libboost-serialization-dev libwebsocketpp-dev openssl libssl-dev ninja-build
インストールできたらコンパイルする
g++ [TestCode] -lboost_system -lcrypto -lssl -lcpprest -lCppRestSwaggerClient
※コンパイルでエラーが発生する場合、テストコードのヘッダ指定を変更するか、-Iオプションで必要なファイルのパスを指定するとよい
テストコードの実行
スタブサーバーを立ち上げて、作成されたa.outを実行してレスポンスが返却されれば成功
$ ./a.out
doggie
参考サイト
How to build for Linux
cpprestsdk
[cpprest] Example of using the cpprest client library code?