内置 CORS、指标、健康检查与多租户
TsgcHTTPRESTServer 在 sgcWebSockets HTTP 服务器基础上,扩展了 REST API 日常所需的基础设施:面向跨域请求的 CORSOptions,通过 ServerStats 提供的可选 /metrics 和 /health 端点,以及通过 Tenancy 实现的多租户请求解析,可按主机、路径、请求头或 JWT 声明解析。Tenant 将解析结果暴露给您自己的请求处理程序。
三个组件,涵盖两大类任务。TsgcHTTPRESTServer 是一个 REST 服务器,内置 CORS、可选的 /metrics 和 /health 端点,以及多租户请求解析。TsgcWSAPIServer_OpenAPI 用 LoadFromFile 加载 OpenAPI 3.x 契约,并对照它分发、校验和验证每一个请求。TsgcOpenAPI_Client 是任意以 OpenAPI 描述的 API 所对应的带类型客户端背后的基类。sgcREST 是独立产品,已内置 sgcWebSockets Core 运行时。
sgcREST 是一个独立软件包。它内置其所基于的 sgcWebSockets Core 运行时,每份许可证都附带完整源代码,因此 REST 分发和 OpenAPI 校验都可以在您自己的调试器中单步跟踪。
TsgcHTTPRESTServer,SGC OpenAPI 面板页上的 TsgcWSAPIServer_OpenAPI。
/metrics 和 /health,可选开启,服务于服务器已有的任何 Authentication 之后。
这三个类按方向清晰地划分开来。REST 服务器和 OpenAPI 服务器发布调用方所访问的端点。OpenAPI 客户端基类则是生成的 SDK 用来调用别人端点的基础。
TsgcHTTPRESTServer 在 sgcWebSockets HTTP 服务器基础上,扩展了 REST API 日常所需的基础设施:面向跨域请求的 CORSOptions,通过 ServerStats 提供的可选 /metrics 和 /health 端点,以及通过 Tenancy 实现的多租户请求解析,可按主机、路径、请求头或 JWT 声明解析。Tenant 将解析结果暴露给您自己的请求处理程序。
TsgcWSAPIServer_OpenAPI 用 LoadFromFile 或 LoadFromString 读取一份 OpenAPI 3.x 文档,并将其变成一个实时分发器:每个到达的请求都会与契约进行匹配,并按操作 id 路由到您的 OnRequest 处理程序。OnValidationError、OnAuthenticate、OnValidateAPIKey、OnValidateBasic 和 OnValidateBearer 覆盖规范声明的各种安全方案,OnBeforeRequest/OnAfterRequest 则包裹每一次调用。
TsgcOpenAPI_Client 是面向任何 OpenAPI 描述 API 的通用运行时客户端:Authentication 涵盖 Basic 身份验证、Bearer 令牌、通用 OAuth2 和 JWT,HTTP_REQUEST 和 HTTP_REQUEST_Async 负责执行调用。将 SetBaseURL 指向您加载或自行生成的契约,即可立即调用。
OnException 会在处理程序错误抵达线路之前将其捕获,校验和身份验证事件都会收到解析后的 TsgcOpenAPIServerContext,带有 PathParams、QueryParams 和 RespondJSON,因此一次调用被接受或拒绝的原因,没有任何一环对您隐藏。
REST 服务器和 OpenAPI 服务器都是 TsgcHTTPServer 的派生类,OpenAPI 客户端则运行在与 Core 运行时其余部分相同的 HTTPS 技术栈之上。从 Delphi 7 到 RAD Studio 13,以及 C++ Builder。
每个组件的参考页面:
REST 服务器会将请求直接交给您。OpenAPI 服务器则会交给您一个已经校验、已经匹配好的操作。两者在 Delphi 7 到 13 以及 C++ Builder 中编译方式相同。
uses
sgcHTTP_REST_Server, sgcHTTP_REST_Server_Stats;
var
RESTServer: TsgcHTTPRESTServer;
Stats: TsgcHTTPServerStats;
begin
// REST 服务器:一个组件即涵盖 CORS、健康检查/指标与多租户
RESTServer := TsgcHTTPRESTServer.Create(nil);
Stats := TsgcHTTPServerStats.Create(nil);
Stats.Endpoints.Health.Enabled := True;
RESTServer.Port := 8080;
RESTServer.CORSOptions.Enabled := True;
RESTServer.CORSOptions.AllowOrigins := 'https://app.example.com';
RESTServer.ServerStats := Stats;
RESTServer.OnCommandGet := RESTServerCommandGet;
RESTServer.Active := True;
end;
procedure TForm1.RESTServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
AResponseInfo.ContentText := '{"status":"ok"}';
end;
uses
sgcWebSocket_Server_API_OpenAPI, sgcHTTP_Server;
var
OpenAPIServer: TsgcWSAPIServer_OpenAPI;
begin
// OpenAPI 服务器:加载契约,按操作 id 分发
OpenAPIServer := TsgcWSAPIServer_OpenAPI.Create(nil);
OpenAPIServer.Server := sgcHTTPServer1;
OpenAPIServer.LoadFromFile('petstore.yaml');
OpenAPIServer.OnRequest := OpenAPIServerRequest;
sgcHTTPServer1.Port := 8080;
sgcHTTPServer1.Active := True;
end;
procedure TForm1.OpenAPIServerRequest(Sender: TObject;
const aOperationId: string; const aContext: TsgcOpenAPIServerContext;
var Handled: Boolean);
begin
if aOperationId = 'getPetById' then
begin
aContext.RespondJSON(200,
'{"id":"' + aContext.PathParamAsString('petId') + '","name":"Rex"}');
Handled := True;
end;
end;
在 Object Pascal 和 C++ Builder 中是同一种形态。完整功能矩阵 →
sgcREST 需要您准备什么,以及不需要什么。两个答案都很简短,而且都写在这个页面上,而不是藏在小字条款里。
组件 角色
TsgcHTTPRESTServer 发布一个 REST API:CORS、
/metrics、/health、多租户
TsgcWSAPIServer_OpenAPI 根据 OpenAPI 3.x 契约
发布一个 REST API
TsgcOpenAPI_Client 调用任意以 OpenAPI 描述的 API
两个服务器组件都是 TsgcHTTPServer 的派生类,
因此它们接入的 Port、TLSOptions 和
Authentication,与您其他 sgcWebSockets
服务器已经在用的完全相同。
作为独立产品,已内置 sgcWebSockets Core 运行时:REST 服务器和 OpenAPI 服务器都运行于其上的 HTTP/TLS 服务器技术栈,以及 OpenAPI 客户端用来解码响应的 JSON 层。一个安装程序,开箱即含完整源代码。
TsgcHTTPRESTServer 与 OpenAPI 服务器所挂接的 HTTP 服务器都是 TsgcHTTPServer 的派生类,因此无论由哪一个发布您的 API,CORS、TLS、Authentication 和请求处理流程的表现都是一致的。
TsgcOpenAPI_Client 直接根据 OpenAPI 文档解析路径、请求头和身份验证方式,运行在 Core 运行时的纯 HTTPS 技术栈之上。
sgcREST 面向 Delphi 7 到 RAD Studio 13 以及 C++ Builder。REST 服务器也内置于 sgcWebSockets Professional 及以上版本中,OpenAPI 服务器和客户端也随现有的 sgcOpenAPI 套件一同提供,因此您现有的许可证可能已经覆盖了它们。免费试用版安装程序就是 sgcWebSockets All-Access 试用版,因此今天就可以评估全部三个类。
sgcREST 实现的是您的契约所描述的 REST 和 OpenAPI 接口,而不是对某个您无法掌控的代码生成器的封装,因此请求、校验和分发都是一等的方法和事件,完整源代码意味着中间没有任何一环是黑盒。
sgcREST 是 eSeGeCe 面向 Delphi、C++ Builder 和 .NET 的十三个组件库之一。它们共享同样的约定,提供完整源代码,并可免版税部署。
面向 Delphi 和 C++ Builder 的 REST 服务器、OpenAPI 服务器和 OpenAPI 客户端组件。独立产品,随附 sgcWebSockets Core 运行时。
了解更多 →面向 Delphi 和 C++ Builder 的 HTTP/2 客户端、gRPC 客户端以及 Google Cloud Pub/Sub、Calendar 和 FCM 客户端。独立产品,随附 sgcWebSockets Core 运行时。
了解更多 →面向 Delphi 和 C++ Builder 的 OAuth2 客户端、JWT 客户端和 WebAuthn 支持。独立产品,随附 sgcWebSockets Core 运行时。
了解更多 →面向 Delphi、C++ Builder、Lazarus 和 .NET 的 WebSocket、HTTP/2、MQTT、AMQP、WebRTC、AI 及 30+ API 集成。它的 Enterprise 版本也包含 gRPC。
了解更多 →面向 Delphi 和 C++ Builder 的 MQTT、AMQP 0.9.1 和 1.0、Apache Kafka 与 STOMP 客户端组件。独立产品,随附 sgcWebSockets Core 运行时。
了解更多 →面向 Delphi 和 C++ Builder 的 Telegram 和 WhatsApp Business 客户端组件。独立产品,随附 sgcWebSockets Core 运行时。
了解更多 →面向 Delphi 和 C++ Builder 的 AI、LLM 和 MCP 组件。一个组件即可对接七家 LLM 提供商,另有 MCP、嵌入和语音。独立产品,随附 sgcWebSockets Core 运行时。
了解更多 →受到全球各地 Delphi、C++ Builder、Lazarus 和 .NET 开发者的信赖。
你们的 sgcWebSockets 库非常实用,而且易于设置。请继续保持!
sgcWebSockets 非常出色,你们的支持也是最棒的!
非常感谢你们的帮助和支持,我很喜欢你们的组件。