sgcREST 機能一覧
sgcREST でできることすべてを、REST サーバーとそのコンパニオン、OpenAPI サーバーエンジン、OpenAPI クライアントに対応付けて示します。すべての機能は Delphi と C++ Builder で同じように動作し、すべてのライセンスに完全なソースコードが付属します。今回のローンチではコンポーネントのサブページはまだ公開されておらず、以下の各項目はこのページ内で完結しています。
sgcREST でできることすべてを、REST サーバーとそのコンパニオン、OpenAPI サーバーエンジン、OpenAPI クライアントに対応付けて示します。すべての機能は Delphi と C++ Builder で同じように動作し、すべてのライセンスに完全なソースコードが付属します。今回のローンチではコンポーネントのサブページはまだ公開されておらず、以下の各項目はこのページ内で完結しています。
CORS、統計、テナンシー & ユーザー
スペックファースト & コードファースト
OpenAPI で記述された任意の API を利用
Delphi 7 から 13、C++ Builder
sgcREST は単体で完結しています。sgcWebSockets Core ランタイムを同梱して出荷されるため、アドオンではなく、RAD Studio に同梱されている標準の Indy ライブラリの上で動作します。
コードファーストの OpenAPI には Delphi XE7 以降が必要です。属性を付けた Delphi クラスから仕様を生成する処理は、XE7 で導入された RTTI に依存しています。REST サーバーとそのコンパニオン、そしてスペックファーストの OpenAPI エンジンは Delphi 7 から 13 まで動作します。
SGC REST パレットページの 4 つのコンポーネントと、コードオンリーの OpenAPI サーバー・クライアントクラス 3 つ。sgcHTTP_REST_Server* ユニットと sgcHTTP_OpenAPI_* ユニットで宣言されています。
| コンポーネント | クラス | パレット? | 説明 |
|---|---|---|---|
| REST サーバー | TsgcHTTPRESTServer | あり | TsgcHTTPServer を土台にした REST API サーバーです。CORS 処理と、アタッチ可能な統計・テナンシーのコンパニオンを備えます。 |
| REST サーバー統計 | TsgcHTTPServerStats | あり | リクエストのカウント、レイテンシー追跡、Prometheus 形式の /metrics、JSON 形式の /health。 |
| REST サーバーテナンシー | TsgcHTTPServer_Tenancy | あり | ホスト、パス、ヘッダー、JWT クレームによるマルチテナント解決。 |
| REST サーバーユーザー | TsgcHTTPServer_Users | あり | ローカルアカウントストア。ユーザーの追加、検証、ハッシュ化、ロールタグ付け、永続化。 |
| OpenAPI サーバー(スペックファースト) | TsgcOpenAPIServerHandler | なし、コードオンリー | 読み込んだ OpenAPI 3.0/3.1 ドキュメントから API を提供し、リクエストを検証します。 |
| OpenAPI サーバー(コードファースト) | TsgcOpenAPICodeFirstScanner | なし、コードオンリー | RTTI 属性を付けた Delphi クラスから OpenAPI 仕様を生成します。Delphi XE7 以降が必要です。 |
| OpenAPI クライアント | TsgcOpenAPI_Client | なし、コードオンリー | OpenAPI で記述された任意のエンドポイント向けの汎用ランタイムクライアントです。 |
TsgcHTTPRESTServer は TsgcHTTPServer のサブクラスなので、sgc HTTP サーバーが共通で持つバインディングと TLS 処理から出発し、その上に REST API に必要な定番の機能を重ねます。
| 機能 | API | 備考 |
|---|---|---|
| CORS | CORSOptions(Enabled、AllowOrigins、AllowHeaders、AllowMethods) | 既定は無効です。有効にすると、プリフライトの OPTIONS リクエストに自動で応答します。 |
| 統計コンパニオン | ServerStats: TsgcHTTPServerStats | 統計コンポーネントをアタッチすると、ルートハンドラーに手を加えることなくすべてのリクエストがカウントされ、時間計測されます。 |
| テナンシーコンパニオン | Tenancy: TsgcHTTPServer_Tenancy、Tenant | テナンシーコンポーネントをアタッチして呼び出し元のテナントを解決し、Tenant が現在のリクエストの結果を読み取ります。 |
| リクエストカウンター | TotalRequests、Status1xx から Status5xx | TsgcHTTPServerStats 上。レスポンス送信時にステータスクラスごとにカウントされます。 |
| レイテンシー | LatencyMinMs、LatencyAvgMs、LatencyMaxMs | TsgcHTTPServerStats 上でリクエストごとに追跡され、Reset でリセットできます。 |
| メトリクスエンドポイント | GetMetricsText、IsMetricsRequest | Prometheus テキストエクスポジション形式 0.0.4 を /metrics で提供します。 |
| ヘルスエンドポイント | GetHealthJSON、IsHealthRequest | /health で提供される JSON のヘルスペイロードで、UptimeSeconds と ActiveConnections を含みます。 |
| エンドポイント別統計 | GetEndpointStats、Endpoints | レポートや管理コンソール向けに、エンドポイントごとのパスとカウントのペアです。 |
| テナント解決 | Resolution、ResolveTenant | TsgcHTTPServer_Tenancy 上。ホストのサフィックス、パスセグメント、ヘッダー、JWT クレームで解決します。 |
| テナントの取得元 | HostSuffix、PathSegmentIndex、HeaderName、ClaimName、DefaultTenant | 設定した Resolution モードが参照する取得元と、何も得られなかった場合のフォールバックです。 |
| カスタム解決 | OnResolveTenant | 組み込みの解決ロジックを上書き、または拡張します。 |
| ユーザーアカウント | AddUser、DeleteUser、FindUser、ValidateCredentials、SetPassword、EnableUser、UserExists | TsgcHTTPServer_Users 上。ソルト付きでハッシュ化された認証情報は、平文で返されることはありません。 |
| ロール | AddRole、RemoveRole、UserHasRole、GetUserRoles | アカウントごとの自由なロールタグで、ルートハンドラーから確認します。 |
| 列挙 | Count、GetUserCount、GetUserByIndex、GetUsernames | レポートや管理コンソール向けの読み取り専用ビューで、パスワードハッシュとソルトは含まれません。 |
| 永続化 | LoadUsers、SaveUsers、SaveToFile、LoadFromFile、ExportUsers、ImportUsers | Storage.EncryptAtRest でストアを暗号化でき、OnLoadUsers/OnSaveUsers でカスタムバックエンドに差し替えられます。 |
| イベント | OnStats、OnResolveTenant、OnValidateCredentials、OnFindUser、OnException | 組み込みロジックがカバーしないケース向けに、コンパニオンごとに 1 つずつイベントが用意されています。 |
どちらのアプローチも同じルートテーブルとリクエストコンテキストに行き着き、異なるのは OpenAPI ドキュメントの出所だけです。
| 機能 | API | 備考 |
|---|---|---|
| ルートテーブル | TsgcOpenAPIRouteTable(Add、Match) | 仕様の paths セクションから構築され、動詞とパスを operationId に対応付けます。 |
| リクエストコンテキスト | TsgcOpenAPIServerContext(Request、Response、PathParams、QueryParams) | マッチしたリクエストごとに 1 インスタンスで、リクエスト終了時に解放されます。 |
| 型付きパラメータ | PathParamAsString、PathParamAsInteger、QueryParamAsString、QueryParamAsInteger、QueryParamAsBoolean | パスまたはクエリの値を、1 回の呼び出しで読み取り、型変換します。 |
| ボディアクセス | BodyAsString、BodyAsJSON、HeaderValue | リクエストボディを 1 度だけ解析し、結果をキャッシュします。 |
| 応答 | RespondJSON、RespondError | ステータスコード付きの JSON ボディ、または構造化されたエラーペイロードを書き込みます。 |
| リクエストのライフサイクル | BeforeHandle、AfterHandle、HandleException | TsgcOpenAPIServerHandler 上。オーバーライドしてログ記録、認証チェック、独自のエラーマッピングを追加できます。 |
| 検証 | TsgcOpenAPIJSONValidator | 仕様が宣言する JSON スキーマに対して、リクエストボディ、クエリ、パスパラメータを検証します。 |
| 仕様生成 | GenerateSpec、Title、Description、Version、BasePath | TsgcOpenAPICodeFirstScanner 上。属性を付けたクラスの RTTI から OpenAPI 3.0 ドキュメントを生成します。 |
| 契約属性 | sgcServiceContract、sgcRoute、sgcSummary、sgcDescription、sgcTag、sgcResponse | 生成される仕様に反映される、クラスレベルおよびメソッドレベルの属性です。 |
| 動詞属性 | sgcHttpGet、sgcHttpPost、sgcHttpPut、sgcHttpDelete、sgcHttpPatch、sgcHttpHead、sgcHttpOptions | 属性を付けたメソッドが応答する HTTP 動詞を宣言します。 |
| パラメータバインディング | sgcFromPath、sgcFromQuery、sgcFromHeader、sgcFromBody、sgcRequired | 各メソッドパラメータの読み取り元を宣言します。 |
| ディスパッチ | TsgcOpenAPICodeFirstDispatcher(RegisterController、DispatchOperation、IsRegistered) | operationId に登録された属性付きメソッドを直接呼び出し、手動の if チェーンは不要です。 |
| 依存関係 | Delphi XE7 以降 | コードファーストのスキャンとディスパッチは System.Rtti に依存しており、XE7 より前では利用できません。スペックファーストにはこの要件はありません。 |
OpenAPI で記述された任意のエンドポイント向けの汎用クライアントで、Basic 認証、ベアラートークン、汎用 OAuth2、汎用 JWT を内蔵しています。
| 機能 | API | 備考 |
|---|---|---|
| 基本呼び出し | HTTP_REQUEST | TsgcOpenAPI_Client 上。TsgcOpenAPIRequest/TsgcOpenAPIResponse のペアを任意のエンドポイントへ運びます。 |
| ベース URL | SetBaseURL、GetBaseURL | リクエスト内のすべての相対パスが解決されるエンドポイントです。 |
| 汎用認証 | Authentication(Basic、Token、OAuth2、JWT) | Basic 認証とベアラートークンに加えて、汎用の OAuth2 と JWT フローです。 |
| トランスポート | TLSOptions、ProxyOptions、EncodeBodyAsUTF8 | sgc HTTP スタックの他の部分と共通の、標準的な TLS とプロキシの設定です。 |
| 進捗 & ログ | OnUpload、OnDownload、Log、LogFileName | 大きなリクエスト/レスポンスボディを追跡し、任意ですべての呼び出しをファイルに記録できます。 |
| リクエストフック | OnBeforeRequest | 送信前にリクエストを検査、または変更します。 |
| TLS フック | OnSSLVerifyPeer、OnSSLGetHandler、OnSSLAfterCreateHandler | 証明書検証とハンドラーのカスタマイズで、sgc HTTP スタックの他の部分と共通です。 |
通信経路上の公開規格と、対応するすべてのコンパイラで共通のソースです。
| 項目 | 内容 |
|---|---|
| OpenAPI | OpenAPI 3.0 と 3.1 に対応し、サーバーのスペックファーストルーティングと、リクエスト検証が照合する JSON スキーマの両方に使われます。 |
| クライアント認証 | HTTP Basic 認証とベアラートークン、そして汎用の OAuth2 と JWT。 |
| メトリクス | /metrics での Prometheus テキストエクスポジション形式 0.0.4。 |
| プラットフォーム | 7 個のクラスすべてで、Windows Win32、Windows Win64、Linux64、macOS、iOS、Android に対応します。 |
| 依存関係 | 同梱の sgcWebSockets Core ランタイム以外はありません。7 個のクラスのいずれにも追加のアドオンは不要です。 |
| コンパイラ | Delphi および C++ Builder 7 から 13 まで。コードファーストの OpenAPI には Delphi XE7 以降が必要です。 |
| エディション | REST サーバーファミリーは sgcWebSockets の Professional エディション以上に、OpenAPI サーバーは Enterprise エディション以上に、OpenAPI クライアントは Standard エディション以上にも含まれています。 |
| ライセンス | 単体で完結します。sgcWebSockets Core ランタイムを同梱し、完全なソースコードが含まれます。 |