【C++】ヘッダー1つで爆速API開発!軽量HTTP/HTTPSライブラリ「cpp-httplib」徹底解説
「やあ、みんな!今夜の夕食はバーベキューだ! でも、食材(データ)を運んでくれる人がいないと始まらないよね?」「そうなんです、シェフ!それに、誰かからの注文(リクエスト)を正確に聞いて、料理(レスポンス)を届けないと...!」
cpp-httplibは、そんなデータ(食材)のやり取りを、ネットワーク上でスムーズに行うための伝令係と配送トラックを兼ねたようなものです。
HTTP/HTTPSサーバー機能
注文(リクエスト)を受けて、料理(レスポンス)を返す「レストランの厨房」になれます。
HTTP/HTTPSクライアント機能
他のレストラン(外部サービス)に「あの食材(データ)をください!」とお願いしに行く「買い出し人」になれます。
しかも、これはC++で書かれていて、たった一つのヘッダーファイル(httplib.h)をプロジェクトに加えるだけで使える、お手軽で強力なライブラリなんです!
なぜ、私たちがこのライブラリを使うと嬉しいのでしょうか?
| 特徴 | メリット |
| ヘッダーオンリー | 外部ライブラリのビルドや複雑なリンク設定が不要。httplib.hをインクルードするだけで、すぐに開発を始められます。まるで、テントのポールがいらないポップアップテントみたいに簡単! |
| C++ネイティブ | C++のコードに直接組み込めるため、高い実行速度を期待できます。パフォーマンスが重要なバックエンドサービスやツールに最適です。 |
軽量なAPIサーバーの構築
大規模なフレームワークは不要だけど、ちょっとしたデータ連携用のAPIを作りたいときに、素早くHTTPサーバーを立ち上げられます。
外部APIとの連携
GitHub、天気予報、決済サービスなどの外部Web APIからデータを取得するクライアントコードをシンプルに書けます。
テスト環境のシミュレーション
本番環境のAPIがまだ準備できていない時に、モックサーバーとして振る舞う簡易サーバーを簡単に作れます。
導入は本当にシンプルです。
GitHubリポジトリから、たった一つのファイルhttplib.hをダウンロードして、ご自身のプロジェクトフォルダにコピーします。
cpp-httplibは、内部でC++11以降の機能と、OSのソケット通信機能(多くの場合、標準で利用可能)を使用しています。
# -std=c++11 (またはそれ以降) を指定することを忘れないようにしましょう
g++ -std=c++11 your_server_code.cc -o server_app
HTTPS通信 (SSL/TLS) を使いたい場合は、OpenSSLなどのSSLライブラリが必要になり、コンパイル時にそれらをリンクする必要があります。
# OpenSSLを使う場合(よりセキュアな通信をしたいとき)
g++ -std=c++11 your_secure_code.cc -o secure_app -lssl -lcrypto
「シェフ、注文ですよ! /hello にアクセスがあったら、『いらっしゃい!』と返してね!」
#include "httplib.h"
#include <iostream>
int main() {
// サーバーのインスタンス(=レストランの厨房)を作ります
httplib::Server svr;
// GETリクエスト(注文)のルート(道順)を設定します
// ユーザーが /hello にアクセスしたら、次の処理を実行します
svr.Get("/hello", [](const httplib::Request& req, httplib::Response& res) {
// レスポンスのコンテンツ(料理)を設定します
res.set_content("Hello, C++ World! (from cpp-httplib)", "text/plain");
//
});
// サーバーを起動します (ポート8080で待機)
std::cout << "Starting server on port 8080..." << std::endl;
svr.listen("0.0.0.0", 8080); // すべてのインターフェースで待ち受けます
return 0;
}
実行後、ブラウザで http://localhost:8080/hello にアクセスすると、指定したメッセージが表示されます。
「シェフ!向こうの『Google』って店から、トップページの看板(HTML)をもらってきて!」
#include "httplib.h"
#include <iostream>
int main() {
// クライアントのインスタンス(=買い出し人)を作ります
httplib::Client cli("www.google.com", 80); // Googleのウェブサイト、ポート80(HTTP)に接続
// GETリクエストを送信します(/でトップページを要求)
if (auto res = cli.Get("/")) {
// 成功した場合 (HTTPステータスコード 200)
if (res->status == 200) {
std::cout << "Successfully fetched Google's homepage!" << std::endl;
// レスポンスの最初の200文字だけ表示
std::cout << "--- Response Body (first 200 chars) ---" << std::endl;
std::cout << res->body.substr(0, 200) << "..." << std::endl;
} else {
// 失敗した場合
std::cout << "Failed. HTTP Status Code: " << res->status << std::endl;
}
} else {
// 接続自体に失敗した場合
std::cout << "Connection failed. Error: " << res.error() << std::endl;
//
}
return 0;
}
これで、cpp-httplibを使って、開発作業がどれだけ軽快になるか、イメージが掴めたかと思います!ぜひ、あなたのプロジェクトの強力なC++の味方として活用してみてくださいね。