CppRestAPIのチュートリアル2

Admin私のストア

前回はsqlとUserFormatを作成しました。続いてUserAPIを作成します。

UserAPIは作成後Routerに登録し、urlから呼び出し出来るようにします。

//UserAPIは仮想基底クラスから派生します。
template<typename Engine>
class UsersAPI : public virtual RestAPI
{
  //データベース(MySQL)にsqlクエリを実行させ、selectメソッドの場合、Formatに変換するクラスにして結果を取得します
  using QUERY = Query<Engine, UserFormat>;
  //sqlファイルの中身を保持するクラスのポインタです
  using SQL = shared_ptr<SQL>;
public:
  UserAPI(Engine db, SQL sql)
    : db{db}, sql{sql}
  {}
  //仮想基底クラスのAPIを実装します。APIはいづれもcpprestsdkを使って受け取る::web::http::http_requestを引数にとります。
  void get(http_request req) override;
  void post(http_request req) override;
  void put(http_request req) override;
  void put(http_request req) override;
private:
  Engine db;
  SQL sql;
}
//getメソッドを例に解説します。
void UserAPI::get(http_request req) {
  Query query{db};
  //get_users.sqlを実行し、std::list<UserFormat>型で結果を取得します。sqlはクロージャ関数オブジェクトです。
  auto records = query.select((*sql)("get_users"));
  //結果をresponse_jsonに保存します。json配列を作成する場合[]オペレーターに添え字で設定します。
  ::web::json::value response_json;
  int i=0;
  for (auto const& record : records) {
    response_json[j] = record.json;
    i++;
  }
  //結果をクライアントへ返します。
  req.reqly(::web::http::status_codes::OK, response_json);
  return;
}

 

/CppRestApi/include/server/router.hppを開き、RouterのコンストラクタでUserAPIを登録します。http://ドメイン/usersでhttpリクエストをリッスンします。

api.insert(std::make_pair("users", std::make_shared<UsersAPI<DB>>(DB{}, sql)));
 
アクセス制御を設定します。
INSERT INTO api(id, api) VALUES(4, 'users');
INSERT INTO access(api_id, auth_id, access) VALUES (4, <1|2|3|4>, <true|false>);
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。