sgcOpenAPI REST クライアントの 手書きは、もう終わり。 仕様を渡せば、Pascal が出てくる。

sgcOpenAPI に OpenAPI 3.x ドキュメントを指定するだけです。パーサーが読み込み、ジェネレーターがネイティブな Object Pascal SDK を出力し、OpenAPI サーバーコンポーネントが自分のエンドポイントを動く仕様として公開します。

  • OpenAPI 3.0 と 3.1
  • JSON と YAML
  • Swagger 2.0 を自動変換
  • Delphi 7 から RAD Studio 13 まで
  • C++ Builder
  • 1,195+公式仕様から生成したビルド済みクラウド SDK
  • 280+Amazon AWS サービス
  • 650+Microsoft Azure サービス
  • 250+Google Cloud サービス
  • 15+Microsoft Graph SDK
動作を見る

sgcOpenAPI を 2 分で見る。

仕様を入れれば Pascal が出てきて、どちら側にもサーバーを立てられます。ナレーションと字幕付きです。再生ボタンを押すまで何もダウンロードされません。

sgcOpenAPI クイックスタート

仕様を Delphi のコードに変え、Delphi のコードを動くサーバーに変えます。

  1. クライアントを生成するコマンドラインに入力する仕様と出力する Pascal ファイルを指定します。入力はファイルでも URL でもよく、JSON と YAML のどちらにも対応します。
  2. 生成されるものごく普通の Pascal です。すべてのオペレーションがメソッドに、すべてのスキーマがクラスになります。-s を付けると、代わりにサーバーのひな形を生成します。
  3. Spec-First サーバーTsgcWSAPIServer_OpenAPI を作成し、LoadFromFile で仕様を読み込み、OnRequest を処理して、サーバーに割り当て、Active にします。
  4. Code-First サーバーDelphi クラスに属性を付けると、起動時にそのクラスから仕様が生成されます。
  5. 検証ValidateRequest と ValidateRequestBody を有効にすると、仕様に合わないリクエストはあなたのコードに届きません。
ビルド済み SDK ライブラリ

4 つのクラウドが、すでに Pascal で使えます。

始めるために何かを生成する必要はありません。4 大クラウドプラットフォームは、公式仕様から生成され最新に保たれた、すぐに使える Pascal SDK として sgcOpenAPI に同梱されています。

Amazon AWS、280 以上のサービス

S3、EC2、Lambda、DynamoDB、SQS、SNS、CloudFormation などを網羅する REST サービス SDK。ユニットをプロジェクトに追加し、型付きのリクエスト / レスポンスクラスでサービスを呼び出すだけです。

AWS の SDK を見る →

Microsoft Azure、650 以上のサービス

ライブラリ内で最大のセットです。Azure VM、Blob Storage、Functions、Cosmos DB、Key Vault をはじめとする Azure コントロールプレーンが、それぞれ生成済みの Pascal クライアントとして揃っています。

Azure の SDK を見る →

Google Cloud、250 以上のサービス

Compute Engine、Cloud Storage、BigQuery、Pub/Sub、Cloud Functions など。

Google の SDK を見る →

Microsoft Graph、15 以上の SDK

Graph API を通じて、Office 365、Microsoft Teams、OneDrive、Outlook、Active Directory を利用できます。

Microsoft の SDK を見る →

その他の仕様

API が OpenAPI または Swagger のドキュメントを公開していれば、ジェネレーターは同じように型付きの Pascal ユニットへ変換します。許可リストはありません。

ジェネレーターの機能 →

どのティアも、すべて込み

Single、Team、Site のいずれにも、パーサー、コードジェネレーター、OpenAPI サーバーコンポーネント、ビルド済み SDK ライブラリのすべてが含まれます。別売りはありません。

ビルド済み SDK 一覧 →

公開仕様からコンパイル可能な Delphi クライアントまでの実践ガイド

パイプライン

仕様を入れれば、コンパイルできるコードが出てくる。

5 つのステップは、すべて IDE の中で完結します。Node.js も、Java 製のコードジェネレーターも、覚えるべきテンプレートエンジンもありません。

# one input, one output, and you have a unit
> sgcOpenAPI.exe -i "api.github.com.json" -o "github.pas" -a 2

File successfully created github.pas

# -a 2 wires up token auth   -u sets the base url
# -x drops operations        -p prunes the classes they used
# -s emits a server stub instead of a client
# exit 0 ok, 5 bad input, 6 bad output, 7 not convertible
uses
  github;  // the unit you just generated

procedure TForm1.btnReposClick(Sender: TObject);
var
  oResponse: TsgcOpenAPI_reposlistforauthenticateduser_Response;
  oRepo: TsgcOpenAPI_repository_Class;
begin
  GetOpenAPIClient.Authentication.Token.BearerToken := 'ghp_...';

  oResponse := GetOpenAPIClient.reposlistforauthenticateduser(
    'private', 'owner', 'all', 'full_name', '', 100, 1);
  try
    if oResponse.IsSuccessful then
      for oRepo in oResponse.Successful.Items do
        Memo1.Lines.Add(oRepo.Full_name)
    else
      Memo1.Lines.Add(IntToStr(oResponse.ResponseCode) + ' ' +
        oResponse.ResponseError);
  finally
    oResponse.Free;
  end;
end;
uses
  sgcHTTP_Server, sgcHTTP_OpenAPI_Server, sgcWebSocket_Server_API_OpenAPI;

procedure TForm1.btnStartClick(Sender: TObject);
begin
  FServer := TsgcHTTPServer.Create(Self);
  FServer.Port := 8080;

  FOpenAPI := TsgcWSAPIServer_OpenAPI.Create(Self);
  FOpenAPI.OpenAPIOptions.Endpoint.ServeSpec := True;
  FOpenAPI.OpenAPIOptions.Endpoint.ServeSwaggerUI := True;
  FOpenAPI.OpenAPIOptions.Validation.ValidateRequest := True;
  FOpenAPI.LoadFromFile('petstore.json');
  FOpenAPI.OnRequest := OnOpenAPIRequest;
  FOpenAPI.Server := FServer;

  FServer.Active := True;
end;

// one event, dispatched by operation id
procedure TForm1.OnOpenAPIRequest(Sender: TObject;
  const aOperationId: string;
  const aContext: TsgcOpenAPIServerContext;
  var Handled: Boolean);
begin
  Handled := True;
  if aOperationId = 'getPetById' then
    aContext.RespondJSON(200,
      FPets.Values[aContext.PathParamAsString('petId')])
  else
    Handled := False;
end;
  1. 仕様を指定する-i にローカルファイルか URL を指定します。JSON でも YAML でもかまいません。どちらもローカルで読み込まれ、Swagger 2.0 のドキュメントもローカルで OpenAPI 3 に変換されます。
  2. 解析するTsgcOpenAPI がドキュメントを Paths、Components、Security、Servers、Tags、Info へ読み込み、扱えなかったものはすべて Warnings に記録します。外部の $ref ポインターは、事前に TsgcOpenAPI_Bundle が取り込みます。
  3. 生成するTsgcOpenAPI_Parser_Client_Pascal はそのリーダーを継承し、Pascal のユニットを 1 つ書き出します。オペレーションごとに 1 メソッド、メソッドごとに 1 つのレスポンスクラス、スキーマごとに 1 クラスで、ドキュメントの説明はコメントとして残ります。
  4. コンパイルする生成されたユニットをプロジェクトに追加し、uses 節に書きます。ライブラリパスに必要なのは sgcOpenAPI の Source フォルダーだけで、Delphi 7 から RAD Studio 13 まで対応します。型付きのレスポンスには XE7 以降が必要です。
  5. 呼び出すGetOpenAPIClient を呼び、Authentication に資格情報を設定して、操作を呼び出します。ベース URL は、ドキュメントの servers エントリからすでに埋め込まれています。

ジェネレーターはリーダーを継承しているので、TsgcOpenAPI を自分で生成し、解析済みのモデルをたどって、その上に独自のツールを構築することもできます。 パーサーコンポーネント →

サーバー側

仕様を使うだけでなく、配信もできます。

TsgcWSAPIServer_OpenAPI は TsgcHTTPServer に接続し、読み込んだドキュメントに照らして受信リクエストをルーティングし、ハンドラーが動く前に検証して、同じポートからドキュメントと Swagger UI を提供します。

Spec-First: Delphi ユニットが petstore.json を TsgcWSAPIServer_OpenAPI に読み込み、仕様からルートテーブルが作られます。

これで得られるもの

GET /pets/{petId} は、aOperationId に getPetById が設定された状態で OnRequest ハンドラーに届きます。GET /openapi.json は読み込んだドキュメントを返し、GET /docs は Swagger UI を開きます。どちらも Endpoint.ServeSpec と Endpoint.ServeSwaggerUI で有効になります。Endpoint.BasePath を使うと、この 2 つをプレフィックスの下に移せます。

Code-First: sgcServiceContract、sgcRoute、sgcHttpGet 属性を付けた Delphi クラスと、起動時にそこから生成される OpenAPI ドキュメント。

仕様ファーストでも、コードファーストでも

LoadFromFile で JSON の契約を読み込み、オペレーション ID で処理を振り分けることも、Pascal クラスに sgcServiceContract、sgcHttpGet、sgcRoute、sgcFromBody を付けて、TsgcOpenAPICodeFirstScanner にドキュメントを作らせることもできます。Code-First には Delphi XE7 以降が必要です。どちらのデモも Demos\30.Server\ に含まれています。

検証: 仕様に合わないリクエストは、OnRequest ハンドラーが動く前に 400 Bad Request で応答されます。

ハンドラーが動く前の検証

Validation.ValidateRequest、ValidateRequired、ValidateRequestBody が、ハンドラーが動く前に受信リクエストをドキュメントと突き合わせます。OnValidationError では、オペレーション ID と失敗の一覧、そしてリクエストを拒否するかどうかを決める Continue フラグを受け取れます。

リクエストコンテキスト: パス、クエリ、ボディのパラメーターは解析済みで、ハンドラーでレスポンスコード、コンテンツタイプ、テキストを設定します。

認証は仕様から自動で組み込み

ドキュメント内の securityScheme エントリが OnValidateAPIKey、OnValidateBasic、OnValidateBearer を動かします。資格情報の照会だけを書けば、コンポーネントがリクエストを解析し、照会が失敗したときは適切なステータスで応答します。

  • API Key
  • HTTP Basic
  • Bearer
  • JWT
  • OAuth2
  • OpenID Connect
  • Swagger UI

このサーバーは、WebSocket エンドポイントや静的ファイルをホストしているのと同じ sgcWebSockets の HTTP サーバー上で動作します。ポートも TLS 証明書もログのストリームも 1 つで済みます。 OpenAPI サーバーコンポーネント →

ライセンス

1 つの製品、3 つのティア。

Delphi と C++ Builder 向けの 1 つのバンドル製品です。OpenAPI 3.x パーサー、ネイティブ Pascal SDK ジェネレーター、OpenAPI サーバーコンポーネント、1,195 以上のビルド済みクラウド SDK が含まれます。ソースコード付き、ロイヤリティフリーで配布できます。チームの人数に合わせてお選びください。

Single

開発者 1 人。パーサー、ジェネレーター、サーバーコンポーネント、すべてのビルド済み SDK。

€399 / 開発者 1 人

Team

開発者 2 人。Single と同じ完全な製品です。

€649 / 開発者 2 人

Site

開発者数は無制限。Single と同じ完全な製品です。

€1,099 / 開発者数無制限

sgcOpenAPI は単独でライセンスされます。パーサー、コードジェネレーター、サーバーコンポーネント、1,195 以上のビルド済み SDK のすべてが、どのティアにも含まれます。

ティアと価格を比較する
お客様の声

開発者の声

世界中の Delphi、C++ Builder、Lazarus、.NET 開発者から信頼されています。

sgcWebSockets ライブラリはとても便利でセットアップも簡単です。これからも頑張ってください!
Simone Moretti Delphi 開発者
sgcWebSockets は素晴らしく、サポートも最高です!
Christian Meyer 創業者 & CTO
ご支援とサポートに本当に感謝しています。コンポーネントが大好きです。
Mark Steinfeld CTO

最初の Pascal SDK を、今日生成しましょう。

パーサー、コードジェネレーター、OpenAPI サーバーコンポーネント、そして 1,195 以上のビルド済みクラウド SDK のすべてが 1 つのライセンスに含まれます。完全なソース、ロイヤリティフリーの配布、Delphi 7 から RAD Studio 13 まで対応します。

eSeGeCe の製品をもっと

eSeGeCe のその他の製品

sgcOpenAPI は、Delphi、C++ Builder、.NET 向けの eSeGeCe コンポーネントライブラリの 1 つです。規約が共通で、ソースコードが付属し、ロイヤリティフリーで配布できます。

sgcWebSockets

WebSocket、HTTP/2、MQTT、AMQP、WebRTC、AI、そして 30 を超える API 統合。OpenAPI サーバーコンポーネントが動作する HTTP サーバーを提供します。

sgcREST

Delphi と C++ Builder 向けの REST サーバー、OpenAPI サーバー、OpenAPI クライアントコンポーネントです。OpenAPI 3.x の契約から REST API を公開したり、OpenAPI で記述された任意の API を利用したりできます。単体製品で、sgcWebSockets Core ランタイムを同梱しています。

sgcHTML

Bootstrap 5 と htmx を基盤とする、サーバーサイド HTML / UI コンポーネント。生成した REST クライアント向けの管理画面やダッシュボードを、JavaScript のフロントエンドなしで構築できます。

sgcQUIC

生の QUIC トランスポートと HTTP/3 のクライアントおよびサーバー、WebTransport 対応。生成した REST クライアントを QUIC / HTTP-3 トランスポート経由で公開し、接続の待機時間を短縮します。

sgcSign

ドキュメントには XAdES、PAdES、CAdES、ASiC、コードには Authenticode、ClickOnce、NuGet、VSIX。API がやり取りするリクエストとレスポンスのボディにも署名できます。

sgcPDF

PDF ファイルの作成、編集、表示、署名、墨消し、検証を純粋な Object Pascal で提供します。DLL の配布は不要で、単体でライセンスされます。

sgcIndy

モダンな TLS、IPv6、HTTP/2 に対応した更新版 Indy TCP/IP コンポーネント。Delphi 7 から 13 まで対応し、生成されたクライアントの下でトランスポート層を担います。

パック、アドオンなど

ブログの最新記事

すべての記事を見る →

現在は eSeGeCe の sgcOpenAPI ビューを表示しています。

別の切り口を見る →
30日間返金保証ご満足いただけない場合は、ご購入から30日以内に全額返金をリクエストできます。 返金ポリシーを見る