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。

规范输入,Pascal 输出,两端各有一台服务器。配有解说和字幕。在您按下播放之前不会下载任何内容。

sgcOpenAPI 快速入门

把规范变成 Delphi 代码,再把 Delphi 代码变成运行中的服务器。

  1. 生成客户端给命令行提供一个输入规范和一个输出 Pascal 文件。输入可以是文件或 URL,格式为 JSON 或 YAML。
  2. 生成结果普通的 Pascal:每个操作对应一个方法,每个 schema 对应一个类。添加 -s 则改为生成服务器骨架。
  3. Spec-First 服务器创建 TsgcWSAPIServer_OpenAPI,调用 LoadFromFile,处理 OnRequest,将其指定给您的服务器并设为 Active。
  4. Code-First 服务器用属性标注一个 Delphi 类,启动时即可根据该类生成规范。
  5. 验证启用 ValidateRequest 和 ValidateRequestBody 后,与规范不符的请求永远不会到达您的代码。
预构建 SDK 库

四大云平台,已是 Pascal。

无需自己生成任何内容即可开始。四大云平台的即用型 Pascal SDK 已内置于 sgcOpenAPI 中,由官方规范生成并持续更新。

Amazon AWS,280+ 个服务

REST 服务 SDK,涵盖 S3、EC2、Lambda、DynamoDB、SQS、SNS、CloudFormation 等。把单元放进项目,即可用带类型的请求和响应类调用服务。

查看 AWS SDK →

Microsoft Azure,650+ 个服务

库中最大的一组。Azure 虚拟机、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 客户端

工作流程

规范输入,可编译代码输出。

五个步骤,全部在 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 单元:每个操作一个方法,每个方法一个响应类,每个 schema 一个类,文档中的说明会作为注释保留。
  4. 编译把生成的单元加入项目并放进 uses 子句。在 Delphi 7 至 RAD Studio 13 上,库路径中只需要有 sgcOpenAPI 的 Source 文件夹,别无其他。带类型的响应需要 XE7 或更高版本。
  5. 调用调用 GetOpenAPIClient,在 Authentication 上设置凭据,然后调用相应操作。基础 URL 已根据文档的 servers 条目写入。

生成器继承自读取器,因此您也可以自己创建 TsgcOpenAPI,遍历解析后的模型,并在其上构建自己的工具。解析器组件 →

服务器端

不只是使用规范,还要提供规范服务。

TsgcWSAPIServer_OpenAPI 挂接到 TsgcHTTPServer,按您加载的文档路由传入的请求,在您的处理程序运行前先行验证,并在同一端口上提供该文档和 Swagger UI。

Spec-First:Delphi 单元将 petstore.json 加载到 TsgcWSAPIServer_OpenAPI,路由表由规范构建。

您能得到什么

GET /pets/{petId} 到达您的 OnRequest 处理程序时,aOperationId 已设为 getPetById。GET /openapi.json 返回您加载的文档,GET /docs 打开 Swagger UI,二者均由 Endpoint.ServeSpec 和 Endpoint.ServeSwaggerUI 开启。Endpoint.BasePath 可将这一对端点移到某个前缀之下。

Code-First:用 sgcServiceContract、sgcRoute 和 sgcHttpGet 属性标注的 Delphi 类,OpenAPI 文档在启动时由它生成。

Spec-First 还是 Code-First

用 LoadFromFile 加载 JSON 契约并按操作 ID 分派,或者用 sgcServiceContract、sgcHttpGet、sgcRoute 和 sgcFromBody 标注一个 Pascal 类,让 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

该服务器运行在同一个 sgcWebSockets HTTP 服务器上,它同时承载您的 WebSocket 端点和静态文件。一个端口,一个 TLS 证书,一条日志流。OpenAPI 服务器组件 →

Licensing

一个产品,三个层级。

面向 Delphi 和 C++ Builder 的一个整合产品:OpenAPI 3.x 解析器、原生 Pascal SDK 生成器、OpenAPI 服务器组件,以及 1,195+ 个预构建云 SDK。含完整源代码,部署免版税。按团队规模选择。

Single

一位开发者。解析器、生成器、服务器组件和全部预构建 SDK。

€399 / 1 位开发者

Team

两位开发者。与 Single 是同一个完整产品。

€649 / 2 位开发者

Site

不限开发者人数。与 Single 是同一个完整产品。

€1,099 / 不限开发者人数

sgcOpenAPI 单独许可。解析器、代码生成器、服务器组件和全部 1,195+ 个预构建 SDK 包含在每个层级中。

比较层级与价格
Testimonials

开发者怎么说

受到全球各地 Delphi、C++ Builder、Lazarus 和 .NET 开发者的信赖。

你们的 sgcWebSockets 库非常实用,而且易于设置。请继续保持!
Simone Moretti Delphi 开发者
sgcWebSockets 非常出色,你们的支持也是最棒的!
Christian Meyer 创始人兼首席技术官
非常感谢你们的帮助和支持,我很喜欢你们的组件。
Mark Steinfeld 首席技术官

今天就生成您的第一个 Pascal SDK。

解析器、代码生成器、OpenAPI 服务器组件和全部 1,195+ 个预构建云 SDK,一份许可证即可拥有。含完整源代码,部署免版税,支持 Delphi 7 至 RAD Studio 13。

eSeGeCe 的更多产品

eSeGeCe 的其他产品

sgcOpenAPI 是 eSeGeCe 面向 Delphi、C++ Builder 和 .NET 的组件库之一。它们遵循相同的约定,附带完整源代码,部署免版税。

扩展包、附加组件及更多

博客最新动态

查看全部文章 →

您正在查看 eSeGeCe 的 sgcOpenAPI 视角。

换个角度看看 →
30 天退款保证不满意?可在购买后 30 天内申请全额退款。 查看退款政策