2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

swagger-codegenによるC++のRESTAPIクライアント生成

Last updated at Posted at 2020-04-19

経緯

作成に至った経緯・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を設定する行がコメントアウトされているため、書き換える。

CMakeLists.txt
# 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を実際に呼び出して実行するためのテストコードを作成する。

cpprest_test.cpp
#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?

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?