OpenAPI 서버
Delphi HTTP 서버 안에서 직접 OpenAPI 3 REST API를 호스팅하세요. 스펙 우선 또는 코드 우선 방식, 자동 Swagger UI, 요청 검증과 CORS를 갖추고 있으며 — 스펙이 단일 진실 공급원이 돼요.
Delphi HTTP 서버 안에서 직접 OpenAPI 3 REST API를 호스팅하세요. 스펙 우선 또는 코드 우선 방식, 자동 Swagger UI, 요청 검증과 CORS를 갖추고 있으며 — 스펙이 단일 진실 공급원이 돼요.
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를 정의하는 두 가지 방법, 네 가지 파이프라인 훅, 스펙 기반 검증, 그리고 컴포넌트가 직접 제공하는 Swagger UI 페이지를 갖추고 있어요.
LoadFromFile 또는 LoadFromString으로 기존 OpenAPI 3 문서를 로드하세요. 라우트, 파라미터, 스키마가 파싱되어 서버가 지켜야 할 계약이 돼요 — JSON을 바꾸고 재시작하면 끝이에요.
Pascal 클래스에 sgcHttpGet / sgcRoute / sgcFromPath / sgcResponse 어트리뷰트를 달면, TsgcOpenAPICodeFirstScanner가 RTTI를 훑어서 런타임에 스펙을 만들어 줘요 — 직접 작성할 JSON이 없어요.
OpenAPIOptions.Endpoint.ServeSwaggerUI를 켜면 서버가 /openapi.json으로 공급되는 대화형 try-it-out 페이지를 /docs에 게시해요 — 별도의 문서 빌드도, 정적 내보내기도 필요 없어요.
본문, 쿼리 문자열, 경로 파라미터, 필수 필드를 스펙의 스키마에 대해 검증해요. 실패 시 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 핸들러를 감싸 줘요 — 서브클래싱 없이 단락(short-circuit), 로깅, 인증, 예외 리매핑이 가능해요.
OpenAPIOptions.Endpoint.BasePath는 모든 라우트와 내장 /openapi.json & /docs 엔드포인트 앞에 접두사를 붙여 줘요. 그래서 API를 /api/v1이나 원하는 네임스페이스 뒤에 둘 수 있어요.
sgcRequired, sgcMinLength, sgcMaxLength, sgcRange, sgcPattern이 그에 맞는 스키마 제약을 내보내, 동일한 규칙이 생성된 스펙에 표시되고 런타임에도 강제돼요.
이 컴포넌트가 구현하는 프로토콜과 포맷의 공식 출처예요.
컴포넌트 레퍼런스로 바로 이동하고, 바로 실행 가능한 데모 프로젝트를 받고, 체험판을 다운로드하세요.
| 온라인 도움말 — OpenAPI 서버 이 컴포넌트의 속성, 메서드, 이벤트 전체 레퍼런스예요. | 열기 | |
| 데모 프로젝트 — Demos\23.OpenAPI 바로 실행 가능한 두 가지 예제예요: 스펙 우선(Petstore JSON)과 코드 우선(태스크 매니저). sgcWebSockets 패키지에 포함되어 있어요 — 아래에서 체험판을 받으세요. | 열기 | |
| 사용자 매뉴얼 (PDF) 라이브러리의 모든 컴포넌트를 다루는 종합 매뉴얼이에요. | 열기 |