OpenAPI Server
Hostuj REST API zgodne z OpenAPI 3 bezpośrednio w serwerze HTTP Delphi. Tryb spec-first lub code-first, z automatycznym Swagger UI, walidacją żądań i CORS — specyfikacja staje się jedynym źródłem prawdy.
Hostuj REST API zgodne z OpenAPI 3 bezpośrednio w serwerze HTTP Delphi. Tryb spec-first lub code-first, z automatycznym Swagger UI, walidacją żądań i CORS — specyfikacja staje się jedynym źródłem prawdy.
Gotowy do użycia serwer API, który podłącza się do TsgcWebSocketHTTPServer, ładuje specyfikację OpenAPI 3 (lub generuje ją z adnotowanych klas Pascala) i kieruje przychodzące żądania według operationId.
TsgcWSAPIServer_OpenAPI
Windows, macOS, Linux, iOS, Android
Enterprise
Utwórz komponent, załaduj (lub wygeneruj) specyfikację i podłącz ją do serwera HTTP. Komponent dopasuje trasy, zwaliduje dane wejściowe i automatycznie udostępni Swagger UI pod adresem /docs.
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;
Dwa sposoby definiowania API, cztery punkty zaczepienia w potoku, walidacja względem specyfikacji i strona Swagger UI udostępniana przez sam komponent.
Załaduj istniejący dokument OpenAPI 3 za pomocą LoadFromFile lub LoadFromString. Trasy, parametry i schematy są parsowane i stają się kontraktem, który serwer musi spełniać — zmień JSON, zrestartuj, gotowe.
Adnotuj klasy Pascala atrybutami sgcHttpGet / sgcRoute / sgcFromPath / sgcResponse; TsgcOpenAPICodeFirstScanner przechodzi przez RTTI i emituje specyfikację w czasie wykonania — bez ręcznego pisania JSON-a.
Włącz OpenAPIOptions.Endpoint.ServeSwaggerUI, a serwer opublikuje interaktywną stronę try-it-out pod adresem /docs, zasilaną przez /openapi.json — bez osobnego budowania dokumentacji ani statycznego eksportu.
Waliduje treść, query string, parametry ścieżki i pola wymagane względem schematów ze specyfikacji. W razie niepowodzenia OnValidationError daje pełną listę błędów oraz flagę Continue pozwalającą odrzucić lub kontynuować obsługę.
Ustaw OpenAPIOptions.CORS.Enabled := True, a serwer odpowie na żądania preflight OPTIONS na każdej trasie, stosując Twoje zasady AllowOrigins / AllowHeaders / AllowMethods.
TsgcOpenAPIServerContext udostępnia PathParamAs*, QueryParamAs*, HeaderValue, BodyAsString / BodyAsJSON oraz RespondJSON i metodę RespondError w stylu RFC 7807.
OnBeforeRequest, OnAfterRequest, OnAuthenticate i OnException opakowują główny obsługiwacz OnRequest — pozwalają przerwać przetwarzanie, logować, uwierzytelniać lub przemapowywać wyjątki bez tworzenia podklas.
OpenAPIOptions.Endpoint.BasePath dodaje prefiks do każdej trasy oraz do wbudowanych punktów końcowych /openapi.json i /docs, dzięki czemu API może być dostępne pod /api/v1 lub dowolną inną przestrzenią nazw.
sgcRequired, sgcMinLength, sgcMaxLength, sgcRange i sgcPattern emitują odpowiadające im ograniczenia schematu, dzięki czemu te same reguły pojawiają się w wygenerowanej specyfikacji i są egzekwowane w czasie wykonania.
Autorytatywne źródła protokołów i formatów implementowanych przez ten komponent.
Przejdź bezpośrednio do dokumentacji komponentu, pobierz gotowe do uruchomienia projekty demonstracyjne oraz wersję próbną.
| Pomoc online — Serwer OpenAPI Pełna dokumentacja właściwości, metod i zdarzeń tego komponentu. | Otwórz | |
| Projekty demonstracyjne — Demos\23.OpenAPI Dwa gotowe do uruchomienia przykłady: spec-first (Petstore JSON) i code-first (menedżer zadań). Dostarczane w pakiecie sgcWebSockets — pobierz wersję próbną poniżej. | Otwórz | |
| Podręcznik użytkownika (PDF) Kompleksowy podręcznik obejmujący każdy komponent biblioteki. | Otwórz |