Ir al contenido

Bibliotecas cliente

Hay dos clientes oficiales generados a partir del mismo documento OpenAPI que la referencia. Solo contienen código generado y se publican con licencia MIT. Para cualquier otro lenguaje, genera tú mismo un cliente a partir del documento OpenAPI: openapi.json es OpenAPI 3.1, y a su lado se publica una versión 3.0 para los generadores que todavía no leen 3.1.

Módulo github.com/112tech/pluspanel-go:

Ventana de terminal
go get github.com/112tech/pluspanel-go
package 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)
}
}

La URL base es la dirección de tu panel; si no tiene ruta, se añade /api/v1. Los errores llegan como problem details (pluspanel.IsProblem(err, "not_found") comprueba el código). El README del módulo explica la paginación, las claves de idempotencia y los clientes HTTP personalizados.

Paquete @pluspanel/api en npm: los tipos de la API, generados con openapi-typescript, y una capa fina sobre el cliente tipado openapi-fetch (su única dependencia en tiempo de ejecución). Solo ESM; Node.js 20+, Deno, Bun y navegadores.

Ventana de terminal
npm install @pluspanel/api
import { 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;
}

Las rutas, los parámetros, los cuerpos y las respuestas están tipados a partir del documento OpenAPI: una ruta o un miembro erróneo es un error de compilación. El paquete exporta también ProblemError, los tipos paths, components y operations, y VERSION. Envía un Idempotency-Key en un POST reintentado con { headers: { "Idempotency-Key": "…" } }.

Ambos clientes siguen la política de versionado: ignoran los miembros y los valores de enumeración desconocidos, así que un plano de control más nuevo no rompe un cliente más antiguo. Actualízalos para usar operaciones nuevas.