OpenAPI Sunucusu

Bir OpenAPI 3 REST API'sini doğrudan bir Delphi HTTP sunucusu içinde barındırın. Spec-first veya code-first, otomatik Swagger UI, istek doğrulama ve CORS ile — spesifikasyon tek doğruluk kaynağı olur.

TsgcWSAPIServer_OpenAPI

TsgcWebSocketHTTPServer'a takılan, bir OpenAPI 3 spesifikasyonu yükleyen (veya açıklamalı Pascal sınıflarından bir tane oluşturan) ve gelen istekleri operationId'ye göre yönlendiren, sorunsuz entegre olan bir API sunucusu.

Bileşen sınıfı

TsgcWSAPIServer_OpenAPI

Spesifikasyon

OpenAPI 3.0

Platformlar

Windows, macOS, Linux, iOS, Android

Sürüm

Enterprise

Spec-first veya code-first — her iki şekilde de üç satır

Bileşeni oluşturun, bir spesifikasyon yükleyin (veya oluşturun), bir HTTP sunucusuna ekleyin. Bileşen, rotaları eşleştirir, girdileri doğrular ve Swagger UI'yi otomatik olarak /docs adresinde sunar.

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
  // Ham spesifikasyon:    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;

// Spesifikasyonu RTTI'den oluştur ve bileşene ver:
var
  Scanner: TsgcOpenAPICodeFirstScanner;
begin
  Scanner := TsgcOpenAPICodeFirstScanner.Create;
  try
    OpenAPI.LoadFromString(Scanner.GenerateSpec(TTaskService));
  finally
    Scanner.Free;
  end;
  OpenAPI.Server := Server;
  Server.Active := True;
end;

İçinde neler var

Bir API tanımlamanın iki yolu, dört pipeline kancası, spesifikasyona karşı doğrulama ve bileşenin kendisi tarafından sunulan bir Swagger UI sayfası.

Spec-first modu

Mevcut bir OpenAPI 3 belgesini LoadFromFile veya LoadFromString ile yükleyin. Rotalar, parametreler ve şemalar ayrıştırılır ve sunucunuzun uyması gereken sözleşme haline gelir — JSON'u değiştirin, yeniden başlatın, tamam.

Code-first modu

Pascal sınıflarını sgcHttpGet / sgcRoute / sgcFromPath / sgcResponse öznitelikleriyle açıklayın; TsgcOpenAPICodeFirstScanner RTTI'yi tarar ve spesifikasyonu çalışma zamanında üretir — elle JSON yazmaya gerek yok.

Yerleşik Swagger UI

OpenAPIOptions.Endpoint.ServeSwaggerUI seçeneğini açın; sunucu, /openapi.json ile beslenen etkileşimli bir dene-test-et sayfasını /docs adresinde yayınlar — ayrı bir belge derlemesi yok, statik dışa aktarma yok.

İstek doğrulama

Gövdeyi, sorgu dizesini, yol parametrelerini ve zorunlu alanları spesifikasyondaki şemalara karşı doğrular. Başarısızlık durumunda OnValidationError size tam hata listesini ve reddetmek veya devam etmek için bir Continue bayrağı verir.

CORS

OpenAPIOptions.CORS.Enabled := True ayarlayın; sunucu, AllowOrigins / AllowHeaders / AllowMethods politikanızı uygulayarak her rotada preflight OPTIONS isteklerine yanıt verir.

Bağlam yardımcıları

TsgcOpenAPIServerContext; PathParamAs*, QueryParamAs*, HeaderValue, BodyAsString / BodyAsJSON ile birlikte RespondJSON ve RFC 7807 tarzı bir RespondError sunar.

Pipeline olayları

OnBeforeRequest, OnAfterRequest, OnAuthenticate ve OnException ana OnRequest işleyicisini sarmalar — alt sınıf oluşturmadan kısa devre yapın, günlüğe kaydedin, kimlik doğrulayın veya istisnaları yeniden eşleyin.

Temel yol ön eki

OpenAPIOptions.Endpoint.BasePath, her rotaya ve yerleşik /openapi.json ve /docs uç noktalarına bir ön ek ekler; böylece API, /api/v1 veya istediğiniz herhangi bir ad alanının arkasında bulunabilir.

Doğrulama öznitelikleri (code-first)

sgcRequired, sgcMinLength, sgcMaxLength, sgcRange ve sgcPattern eşleşen şema kısıtlamalarını üretir; böylece aynı kurallar oluşturulan spesifikasyonda görünür ve çalışma zamanında uygulanır.

Spesifikasyonlar ve referanslar

Bu bileşenin uyguladığı protokoller ve formatlar için yetkili kaynaklar.

Belgeler ve Demolar

Bileşen referansına doğrudan bağlanın, çalışmaya hazır demo projelerini alın ve denemeyi indirin.

Çevrimiçi Yardım — OpenAPI Sunucusu Bu bileşen için tam özellik, metot ve olay referansı.
Demo Projeleri — Demos\23.OpenAPI Çalışmaya hazır iki örnek: spec-first (Petstore JSON) ve code-first (görev yöneticisi). sgcWebSockets paketinin içinde gelir — denemeyi aşağıdan indirin.
Kullanıcı Kılavuzu (PDF) Kütüphanedeki her bileşeni kapsayan kapsamlı kılavuz.

Belgelenmiş Bir REST API Yayınlamaya Hazır mısınız?

Ücretsiz denemeyi indirin ve bir OpenAPI spesifikasyonunu çalışan bir Delphi sunucusuna dönüştürün — Swagger UI dahil.