HTTP-SDKs
HTTP-SDKs
Typisierte HTTP-Clients für die Polycrate API in Go, Python und JavaScript/TypeScript. Ein öffentliches GitHub-Repo, drei Sprachen, dieselbe OpenAPI-Beschreibung.
Die Clients wrappen HTTP. Sie verwalten weder Ressourcen-Lifecycle noch Idempotenz. Die SDK-Version entspricht der API-Version (API 0.33.0 → Tag v0.33.0). Die Packages liegen nicht auf PyPI oder npm — Installation nur von GitHub, Tag auf die API pinnen, mit der Sie sprechen.
Repo: github.com/ayedode/polycrate-sdk
| Sprache | Paket | Installation |
|---|---|---|
| Go | github.com/ayedode/polycrate-sdk/go |
go get github.com/ayedode/polycrate-sdk/go@v<api-version> |
| Python | polycrate |
pip install "polycrate @ git+https://github.com/ayedode/polycrate-sdk.git@v<api-version>#subdirectory=python/polycrate" |
| JavaScript / TypeScript | @ayedo/polycrate-sdk |
npm i github:ayedode/polycrate-sdk#v<api-version>:js |
Live-OpenAPI: GET /api/v1/schema/. Interaktive Docs: /api/docs/.
Authentifizierung
Geschützte Endpoints erwarten:
Authorization: Bearer <token>
HTTP Basic auf /api/v1/… reicht nicht. Langlebige Keys legt die Web-UI an (Secret wird einmal angezeigt):
| Key | Wo in der UI |
|---|---|
| User | Account-Menü → API Keys (/ui/accounts/api-keys/) |
| Organization | Organisation → Tab API Keys |
| System | Administration → System API Keys (/ui/administration/system-api-keys/, nur Staff) |
Anlegen, Rechte und Widerruf: API-Keys & Authentifizierung.
Optional ein kurzlebiges User-Token:
curl -X POST https://api.acme.corp/api/login/ \
-H "Content-Type: application/json" \
-d '{"username":"ops@acme.corp","password":"<password>"}'
Die Response enthält token. Dieselben Keys gelten für den API-MCP.
Basis-URL der Instanz ohne Pfad-Suffix, z. B. https://api.acme.corp.
Go
Go 1.23+.
go get github.com/ayedode/polycrate-sdk/go@v0.33.0
package main
import (
"context"
"fmt"
"net/http"
"os"
polycrate "github.com/ayedode/polycrate-sdk/go"
)
func main() {
token := os.Getenv("POLYCRATE_TOKEN")
client, err := polycrate.NewClientWithResponses("https://api.acme.corp",
polycrate.WithRequestEditorFn(func(_ context.Context, req *http.Request) error {
req.Header.Set("Authorization", "Bearer "+token)
return nil
}),
)
if err != nil {
panic(err)
}
pageSize := 3
resp, err := client.ApiV1WorkspacesListWithResponse(context.Background(), &polycrate.ApiV1WorkspacesListParams{
PageSize: &pageSize,
})
if err != nil {
panic(err)
}
if resp.JSON200 == nil {
panic(fmt.Sprintf("HTTP %d", resp.StatusCode()))
}
fmt.Println(resp.JSON200.Count)
}
Jede OpenAPI-Operation wird eine Methode auf Client / ClientWithResponses (z. B. ApiV1WorkspacesListWithResponse). Erfolgreiches JSON liegt auf JSON200 (oder dem passenden Statusfeld). Listen-Namen wie WorkspaceList.Name sind Pointer.
Python
Python 3.11+, Abhängigkeiten httpx und attrs.
pip install "polycrate @ git+https://github.com/ayedode/polycrate-sdk.git@v0.33.0#subdirectory=python/polycrate"
from polycrate import AuthenticatedClient
from polycrate.api.api.api_v1_workspaces_list import sync_detailed
client = AuthenticatedClient(
base_url="https://api.acme.corp",
token="...",
prefix="Bearer",
)
resp = sync_detailed(client=client, page_size=3)
if resp.status_code != 200 or resp.parsed is None:
raise SystemExit(f"HTTP {resp.status_code}")
print(resp.parsed.count, [ws.name for ws in resp.parsed.results])
Jeder Pfad wird ein Modul unter polycrate.api.api mit vier Aufrufen:
sync/sync_detailed— blockierendasyncio/asyncio_detailed— async
*_detailed liefert immer ein Response (status_code, content, parsed). Token-Auth über AuthenticatedClient, öffentliche Endpoints über Client.
Lokal aus einem Clone: pip install ./python/polycrate.
JavaScript / TypeScript
ESM. Das Paket liefert TypeScript-Quellen (js/src), kein separates Build.
npm i github:ayedode/polycrate-sdk#v0.33.0:js
import { OpenAPI, apiV1WorkspacesList } from "@ayedo/polycrate-sdk";
OpenAPI.BASE = "https://api.acme.corp";
OpenAPI.TOKEN = process.env.POLYCRATE_TOKEN;
const page = await apiV1WorkspacesList({ pageSize: 3 });
console.log(page.count, page.results.map((ws) => ws.name));
OpenAPI.TOKEN einmal setzen — der Client schickt Authorization: Bearer. Jede Operation ist eine benannte Funktion (apiV1WorkspacesList, apiV1OrganizationsList, …). Query-Felder in camelCase (pageSize).
Lokal aus einem Clone: npm i ./js.
Support
Das Repo ist generiert. Pull Requests und GitHub-Issues werden nicht angenommen.
Probleme (Sprache, Version, minimaler Request) an support@ayedo.de. Keine Tokens, Passwörter oder Kundendaten mitsenden.
Lizenz: Apache 2.0.