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 — blockierend
  • asyncio / 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.

Weiterführend