지금까지 등록된 빌드를 받으려면 계정에 로그인하고 Downloads를 열어 제품을 선택한 뒤 클릭해야 했습니다. 한 번만 받을 때는 괜찮지만, 빌드 스크립트나 CI 파이프라인, 프로비저닝 도구에서 최신 설치 파일을 가져오려고 할 때는 번거롭습니다.
그래서 계정에 작은 REST API를 추가했습니다. 이 API는 OpenAPI 3.0으로 기술되어 있으며 /api/v1 아래에 위치합니다. 평소 사용하는 계정 자격 증명으로 한 번 인증하여 토큰을 받은 다음, 구독으로 이용할 수 있는 파일을 정확히 나열하고 다운로드할 수 있습니다. 웹 Downloads 페이지와 동일한 권한 및 서명 로직을 재사용하므로, 브라우저에서 보던 것과 항상 동일한 파일을 볼 수 있습니다. 그리고 전체가 sgcWebSockets OpenAPI 서버로 제공되기 때문에, sgcOpenAPI 기반으로 만든 바로 실행 가능한 Delphi 클라이언트도 함께 제공할 수 있었습니다.
1. 인증하기
계정 사용자 이름과 비밀번호를 POST /api/v1/login으로 보내세요. 수명이 짧은 Bearer access token(과 refresh token)을 받게 됩니다. 다른 모든 호출에서는 Authorization 헤더에 access token을 전달하세요.
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": "…" }
}
access token이 만료되면 refresh token과 함께 POST /api/v1/refresh를 호출하여 새 토큰 쌍을 받거나, 간단히 다시 로그인하면 됩니다. 더 이상 필요 없는 토큰은 POST /api/v1/logout으로 해지할 수 있습니다.
2. 다운로드할 수 있는 파일 나열하기
GET /api/v1/downloads는 계정에서 다운로드할 수 있는 파일을 반환합니다. 최신 릴리스를 받으려면 version을 생략하고, 특정 버전을 받으려면 ?version=2026.5.0을, 현재 beta를 받으려면 ?version=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에서 API를 다룰 수 있습니다. 로그인하고, 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 페이지와 정확히 동일합니다. 하위 계정은 브라우저에서와 마찬가지로 상위 계정의 다운로드 권한을 상속받습니다.
질문이나 피드백이 있으시거나, 이것을 빌드에 연동하는 데 도움이 필요하신가요? 문의하기 — 코드를 작성한 사람들로부터 직접 답변을 받으실 수 있습니다.
