mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-01-20 05:12:09 +00:00
2.9 KiB
2.9 KiB
TLS抽象化API導入後のコード整理・簡潔化ガイド
1. 共通インターフェースの徹底利用
tls_ctx_t,tls_session_t,tls_cert_tなどの抽象型を積極的に使い、API呼び出し部分でのみバックエンド分岐する。- 例:
// 共通API bool tls_set_server_cert_pem(tls_ctx_t ctx, const char *cert, const char *key, const char *password); // バックエンドごとの実装は .cc で分岐
2. 条件付きコンパイルの整理
#ifdef CPPHTTPLIB_OPENSSL_SUPPORTや#ifdef CPPHTTPLIB_MBEDTLS_SUPPORTの分岐は、実装部(.cc)に集約し、ヘッダでは極力抽象APIのみ宣言。- 共通部分は
#ifdefを減らし、実装のみに限定。
3. 重複コードの関数化
- 例えば、証明書のロードやエラー処理など、OpenSSL/MbedTLSで似た処理は共通関数にまとめる。
- 例:
bool tls_load_ca(tls_ctx_t ctx, const std::string &file, const std::string &dir);
4. 共通エラーハンドリング
TlsError構造体やErrorCodeenum を全バックエンドで統一利用。- エラー文字列変換も共通APIでラップ。
5. クライアント・サーバの共通化
SSLClient/SSLServerのコンストラクタや証明書更新処理は、内部でtls_*APIを呼ぶだけにし、分岐を減らす。
6. 冗長なパラメータ・状態管理の削減
- 例えば
ctx_やsession_の型はvoid*で統一し、型キャストは実装部でのみ行う。 host_components_の分割処理なども共通関数化。
7. コメント・ドキュメントの整理
- バックエンドごとの注意点は実装部にコメントを集約し、ヘッダはAPI仕様のみに集中。
例: 冗長な証明書ロード処理の統一
// filepath: /Users/yuji/Projects/cpp-httplib-ssl/httplib.h
// ...existing code...
namespace detail {
namespace tls {
// 共通API
inline bool tls_load_ca(tls_ctx_t ctx, const std::string &file, const std::string &dir) {
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT
if (!file.empty()) return tls_load_ca_file(ctx, file.c_str());
if (!dir.empty()) return tls_load_ca_dir(ctx, dir.c_str());
#elif defined(CPPHTTPLIB_MBEDTLS_SUPPORT)
if (!file.empty()) return tls_load_ca_file(ctx, file.c_str());
if (!dir.empty()) return tls_load_ca_dir(ctx, dir.c_str());
#endif
return false;
}
} // namespace tls
} // namespace detail
// ...existing code...
まとめ
- 抽象APIの利用と実装部での分岐を徹底し、ヘッダはシンプルに。
- 重複処理は関数化し、条件付きコンパイルは最小限に。
- 安全性・正確性・パフォーマンスは維持しつつ、可読性・保守性を向上。
ご要望に応じて、具体的なリファクタリング案やコード修正例をさらにご提案できます。どの部分を優先的に整理したいかご指定ください。