到目前为止,获取已注册的构建版本意味着您需要登录账户,打开 Downloads,选择一个产品并点击下载。偶尔操作一次没什么问题,但当您想从构建脚本、CI 流水线或自动部署工具中拉取最新的安装程序时,这就显得很不方便了。
因此,我们为您的账户新增了一个小型 REST API,它采用 OpenAPI 3.0 描述,位于 /api/v1 之下。您只需用平时的账户凭据完成一次身份验证,获取一个令牌,然后即可列出并下载订阅授权范围内的文件。它复用了与网页 Downloads 页面相同的授权与签名逻辑,因此您看到的文件始终与在浏览器中看到的一致。而且由于整个服务由 sgcWebSockets OpenAPI 服务器提供,我们还能交付一个基于 sgcOpenAPI 构建的开箱即用 Delphi 客户端。
1. 身份验证
将您的账户用户名和密码发送至 POST /api/v1/login。您将得到一个短期有效的 Bearer 访问令牌(以及一个刷新令牌)。在之后的每次调用中,都要在 Authorization 标头中传递该访问令牌。
curl -X POST https://www.esegece.com/api/v1/login \
-H "Content-Type: application/json" \
-d '{"username":"YOUR_USERNAME","password":"YOUR_PASSWORD"}'
响应中携带令牌和一份简要的个人资料:
{
"token_type": "Bearer",
"access_token": "…",
"refresh_token": "…",
"expires_in": 3600,
"user": { "username": "…", "name": "…", "email": "…" }
}
当访问令牌过期时,使用您的刷新令牌调用 POST /api/v1/refresh 以获取一对新令牌,或者直接重新登录。POST /api/v1/logout 会吊销您不再需要的令牌。
2. 列出您可以下载的文件
GET /api/v1/downloads 会返回您的账户可下载的文件。省略版本即为最新发布版,传递 ?version=2026.5.0 可指定特定版本,或传递 ?version=beta 获取当前的 beta 版本。使用 GET /api/v1/products/versions 可发现可用的版本及其发布日期。
curl "https://www.esegece.com/api/v1/downloads" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
每一项描述一个文件,并包含一个短期有效的已签名 url,用于流式传输文件字节:
{
"files": [
{
"product": "sgcWebSockets",
"version": "2026.5.0",
"kind": "release",
"filename": "sgcWebSockets_2026.5.0.exe",
"date": "2026-05-15",
"url": "https://www.esegece.com/api/v1/dl?t=…"
}
],
"version": "2026.5.0"
}
3. 下载每个文件
每一项都带有一个开箱即用的 url。只需对它发起 GET 请求并保存字节即可 — 该链接经过签名且短期有效,因此请在下载前不久再请求文件列表。
curl -L -o setup.exe "URL_FROM_THE_LIST"
使用 sgcOpenAPI 的 Delphi 客户端
由于该 API 采用 OpenAPI 描述,您只需几行代码就能用 sgcOpenAPI 客户端在 Delphi 中驱动它:登录、设置 Bearer 令牌,然后列出(并下载)您的文件。您也可以让 sgcOpenAPI 代码生成器指向该规范,生成一个完全类型化的客户端。
uses
sgcHTTP_OpenAPI_Client;
var
oClient: TsgcOpenAPI_Client;
oReq: TsgcOpenAPIRequest;
oResp: TsgcOpenAPIResponse;
vToken: string;
begin
oClient := TsgcOpenAPI_Client.Create(nil);
oReq := TsgcOpenAPIRequest.Create;
oResp := TsgcOpenAPIResponse.Create;
try
oClient.SetBaseURL('https://www.esegece.com');
// 1) Log in -> Bearer token
oReq.Method := oapiHttpPOST;
oReq.Endpoint := '/api/v1/login';
oReq.ContentType := 'application/json';
oReq.Body := '{"username":"YOUR_USERNAME","password":"YOUR_PASSWORD"}';
oClient.HTTP_REQUEST(oReq, oResp);
vToken := GetJSONValueFromNode('access_token', oResp.ResponseText);
oClient.Authentication.Token.BearerToken := vToken;
// 2) List the files for the latest release
oReq.Method := oapiHttpGET;
oReq.Endpoint := '/api/v1/downloads';
oReq.Body := '';
oReq.Security := oapiSecurityToken;
oClient.HTTP_REQUEST(oReq, oResp);
Writeln(oResp.ResponseText);
finally
oResp.Free;
oReq.Free;
oClient.Free;
end;
end;
我们提供了该程序的完整版本 — 它会登录、列出每一个授权文件并将它们全部下载 — 作为可从您的账户下载的 .dpr 文件。
交互式文档及其位置
登录您的账户,打开侧边栏中的 API 条目(/my-account/api)。在那里您会找到一份并排展示 Delphi 与 curl 示例的 Quickstart、位于 /api/v1/docs 的交互式 Swagger UI、位于 /api/v1/openapi.json 的原始 OpenAPI 规范,以及可下载的 Delphi 客户端。该页面支持账户门户提供的所有语言。
关于安全性的说明:令牌短期有效且可吊销,登录受速率限制,并且每个请求都会根据您账户的授权进行检查 — 这与网页 Downloads 页面完全一致。子账户会继承其父账户的下载内容,正如它们在浏览器中那样。
有疑问、反馈,或需要帮助将其接入您的构建流程?联系我们 — 您将得到编写这些代码的人的回复。
