OpenAPI サーバー
Delphi の HTTP サーバー内に直接 OpenAPI 3 の REST API をホストできます。スペックファーストでもコードファーストでも、自動 Swagger UI、リクエスト検証、CORS を備え — スペックが唯一の信頼できる情報源(Single Source of Truth)になります。
Delphi の HTTP サーバー内に直接 OpenAPI 3 の REST API をホストできます。スペックファーストでもコードファーストでも、自動 Swagger UI、リクエスト検証、CORS を備え — スペックが唯一の信頼できる情報源(Single Source of Truth)になります。
TsgcWebSocketHTTPServer に組み込めるドロップイン API サーバーです。OpenAPI 3 のスペックを読み込み(または注釈付き Pascal クラスから生成し)、operationId によって受信リクエストをディスパッチします。
TsgcWSAPIServer_OpenAPI
Windows、macOS、Linux、iOS、Android
Enterprise
コンポーネントを作成し、スペックを読み込み(または生成し)、HTTP サーバーに接続します。コンポーネントはルートをマッチさせ、入力を検証し、/docs で Swagger UI を自動的に提供します。
uses
sgcWebSocket, sgcWebSocket_Server_API_OpenAPI,
sgcHTTP_OpenAPI_Server;
var
Server: TsgcWebSocketHTTPServer;
OpenAPI: TsgcWSAPIServer_OpenAPI;
begin
Server := TsgcWebSocketHTTPServer.Create(nil);
Server.Port := 8080;
OpenAPI := TsgcWSAPIServer_OpenAPI.Create(nil);
OpenAPI.OnRequest := HandleRequest;
OpenAPI.OpenAPIOptions.Endpoint.ServeSwaggerUI := True;
OpenAPI.OpenAPIOptions.Validation.ValidateRequest := True;
OpenAPI.OpenAPIOptions.CORS.Enabled := True;
OpenAPI.LoadFromFile('petstore.json');
OpenAPI.Server := Server;
Server.Active := True;
// Swagger UI: http://localhost:8080/docs
// Raw spec: http://localhost:8080/openapi.json
end;
procedure THost.HandleRequest(Sender: TObject;
const aOperationId: string;
const aContext: TsgcOpenAPIServerContext;
var Handled: Boolean);
begin
Handled := True;
if aOperationId = 'getPetById' then
aContext.RespondJSON(200, PetAsJSON(aContext.PathParamAsInteger('petId')))
else
Handled := False;
end;
uses
sgcWebSocket_Server_API_OpenAPI,
sgcHTTP_OpenAPI_Server_CodeFirst;
type
[sgcServiceContract('Task Manager', '', '1.0.0')]
[sgcRoute('/api/v1')]
TTaskService = class
public
[sgcHttpGet] [sgcRoute('/tasks/{taskId}')]
[sgcSummary('Get a task by ID')]
[sgcResponse(200, 'The requested task')]
[sgcResponse(404, 'Task not found')]
procedure GetTask([sgcFromPath][sgcRequired] const taskId: Integer); virtual;
end;
// Generate the spec from RTTI and feed it to the component:
var
Scanner: TsgcOpenAPICodeFirstScanner;
begin
Scanner := TsgcOpenAPICodeFirstScanner.Create;
try
OpenAPI.LoadFromString(Scanner.GenerateSpec(TTaskService));
finally
Scanner.Free;
end;
OpenAPI.Server := Server;
Server.Active := True;
end;
API を定義する 2 つの方法、4 つのパイプラインフック、スペックに対する検証、そしてコンポーネント自身が提供する Swagger UI ページ。
既存の OpenAPI 3 ドキュメントを LoadFromFile または LoadFromString で読み込みます。ルート、パラメータ、スキーマが解析され、サーバーが守るべき契約になります — JSON を変更し、再起動するだけで完了です。
Pascal クラスに sgcHttpGet / sgcRoute / sgcFromPath / sgcResponse 属性を付与します。TsgcOpenAPICodeFirstScanner が RTTI を走査し、実行時にスペックを出力します — JSON を手書きする必要はありません。
OpenAPIOptions.Endpoint.ServeSwaggerUI を有効にすると、サーバーが /docs で対話的な try-it-out ページを公開し、/openapi.json から情報を取得します — 別途ドキュメントをビルドする必要も、静的エクスポートも不要です。
ボディ、クエリ文字列、パスパラメータおよび必須フィールドを、スペックのスキーマに対して検証します。失敗時には OnValidationError がエラー一覧と、拒否または続行を選択する Continue フラグを提供します。
OpenAPIOptions.CORS.Enabled := True を設定すると、サーバーがすべてのルートでプリフライトの OPTIONS に応答し、AllowOrigins / AllowHeaders / AllowMethods ポリシーを適用します。
TsgcOpenAPIServerContext は PathParamAs*、QueryParamAs*、HeaderValue、BodyAsString / BodyAsJSON に加え、RespondJSON および RFC 7807 形式の RespondError を公開します。
OnBeforeRequest、OnAfterRequest、OnAuthenticate、OnException がメインの OnRequest ハンドラーをラップします — サブクラス化することなく、ショートサーキット、ロギング、認証、例外の再マッピングが可能です。
OpenAPIOptions.Endpoint.BasePath はすべてのルートおよび組み込みの /openapi.json と /docs エンドポイントにプレフィックスを付加します。これにより API を /api/v1 など任意の名前空間の配下に配置できます。
sgcRequired、sgcMinLength、sgcMaxLength、sgcRange、sgcPattern が対応するスキーマ制約を出力するため、生成されたスペックに同じルールが反映され、実行時にも強制されます。
このコンポーネントが実装しているプロトコルおよびフォーマットの公式情報源。
コンポーネントリファレンスへのディープリンク、すぐに実行できるデモプロジェクト、体験版のダウンロード。
| オンラインヘルプ — OpenAPI サーバー このコンポーネントのプロパティ、メソッド、イベントの完全なリファレンス。 | 開く | |
| デモプロジェクト — Demos\23.OpenAPI すぐに実行できる 2 つの例:スペックファースト(Petstore JSON)とコードファースト(タスクマネージャー)。sgcWebSockets パッケージに同梱 — 下記より体験版をダウンロードしてください。 | 開く | |
| ユーザーマニュアル (PDF) ライブラリ内のすべてのコンポーネントを網羅した包括的なマニュアル。 | 開く |