Biblioteci client
Doi clienți oficiali sunt generați din același document OpenAPI ca referința.
Conțin doar cod generat și sunt publicați sub licența MIT. Pentru orice alt limbaj, generează-ți
singur un client din documentul OpenAPI: openapi.json este OpenAPI 3.1, iar
lângă el este publicată și o versiune 3.0, pentru generatoarele care nu citesc încă 3.1.
Modulul github.com/112tech/pluspanel-go:
go get github.com/112tech/pluspanel-gopackage main
import ( "context" "fmt" "log" "os"
"github.com/112tech/pluspanel-go")
func main() { c, err := pluspanel.NewWithAPIKey("https://panel.example.com", os.Getenv("PLUSPANEL_API_KEY")) if err != nil { log.Fatal(err) } res, err := c.ListServersWithResponse(context.Background(), &pluspanel.ListServersParams{}) if err != nil { log.Fatal(err) } if err := pluspanel.CheckResponse(res.HTTPResponse, res.Body); err != nil { log.Fatal(err) // a *pluspanel.Problem: Code, Detail, RequestID… } for _, s := range *res.JSON200.Items { fmt.Println(s.Id, s.Name, s.Status) }}URL-ul de bază este adresa panoului tău; /api/v1 se adaugă când nu are cale. Erorile vin ca problem
details (pluspanel.IsProblem(err, "not_found") testează codul). README-ul modulului descrie paginarea,
cheile de idempotență și clienții HTTP personalizați.
TypeScript
Secțiune intitulată „TypeScript”Pachetul @pluspanel/api din npm: tipurile API-ului, generate cu openapi-typescript, și un strat
subțire peste clientul type-safe openapi-fetch (singura lui dependență la rulare). Doar ESM; Node.js
20+, Deno, Bun și browsere.
npm install @pluspanel/apiimport { createClient, isProblem, unwrap } from "@pluspanel/api";
const api = createClient({ baseUrl: "https://panel.example.com", // /api/v1 is added when the URL has no path apiKey: process.env.PLUSPANEL_API_KEY ?? "",});
// Every page of servers.let cursor: string | undefined;do { const query = { limit: 100, ...(cursor ? { cursor } : {}) }; const page = await unwrap(api.GET("/servers", { params: { query } })); for (const s of page.items ?? []) console.log(s.id, s.name, s.status); cursor = page.next_cursor ?? undefined;} while (cursor);
// Errors are problem details: unwrap throws a ProblemError (code, detail, requestId…).try { await unwrap(api.GET("/servers/{id}", { params: { path: { id: "6f1c2d3e-…" } } }));} catch (err) { if (isProblem(err, "not_found")) console.log("gone"); else throw err;}Căile, parametrii, corpurile și răspunsurile sunt tipizate din documentul OpenAPI: o cale sau un membru
greșit este o eroare de compilare. Pachetul exportă și ProblemError, tipurile paths, components și
operations, precum și VERSION. Trimite un Idempotency-Key la un POST reîncercat cu
{ headers: { "Idempotency-Key": "…" } }.
Compatibilitate
Secțiune intitulată „Compatibilitate”Ambii clienți respectă politica de versionare: ignoră membrii și valorile de enumerare necunoscute, deci un control plane mai nou nu strică un client mai vechi. Actualizează-i ca să folosești operațiile noi.