Démarrage rapide
Ce guide présente successivement les trois points d’entrée : le client destiné aux interfaces, le débogueur pour les scripts et les sessions manuelles persistantes.
Prérequis
- Node.js 22.12.0 ou version ultérieure
- Un document OpenAPI 3.2 chargé sous forme d’objet JavaScript
1. Client destiné aux interfaces
createClient(options?) renvoie un ProtoClient. L’argument facultatif options contrôle la réécriture dans la spécification et la normalisation des réponses.
import { createClient } from "@powerduck/openapi-request";
// Create a client (options are optional)
const client = createClient({
writeBack: {
// Optional: control how responses are merged back into the spec
mergeExamples: true,
},
response: {
// Optional: control how response objects are normalized
preserveOriginalBody: false,
},
});
Préparer une requête
prepare(sendOptions) reçoit un objet SendOptions contenant spec et target, puis renvoie un PreparedRequest décrivant le protocole, le mode d’affichage et le type de flux.
const spec = {
openapi: "3.2.0",
info: { title: "Example API", version: "1.0.0" },
paths: {
"/users/{id}": {
get: {
operationId: "getUserById",
parameters: [
{ name: "id", in: "path", required: true, schema: { type: "string" } },
],
responses: { "200": { description: "OK" } },
},
},
},
};
// Target by operationId (recommended)
const plan = client.prepare({
spec,
target: { operationId: "getUserById" },
});
// Or target by method + path
const plan2 = client.prepare({
spec,
target: { method: "GET", path: "/users/{id}" },
});
console.log(plan.protocol); // "http"
console.log(plan.display.mode); // "response"
console.log(plan.stream.kind); // "none"
Envoyer une requête
send(sendOptions) reçoit également un objet SendOptions. Passez les valeurs concrètes dans values.
const result = await client.send({
spec,
target: { operationId: "getUserById" },
values: {
path: { id: "42" },
query: { include: "profile" },
header: { "X-Request-Id": "abc-123" },
},
serverUrl: "https://api.example.com",
auth: {
type: "bearer",
token: "your-token-here",
},
timeout: 15000,
});
console.log(result.response.status); // e.g. 200
console.log(result.response.body); // parsed response body
console.log(result.response.headers); // response headers
console.log(result.response.timings.durationMs); // duration in ms
Envoyer un lot
sendMany(spec, targets, shared?) exécute plusieurs requêtes et renvoie un résultat par cible. Les échecs ne suppriment jamais les résultats des autres requêtes réussies.
const batchResult = await client.sendMany(
spec,
[
{ target: { operationId: "getUserById" }, values: { path: { id: "1" } } },
{ target: { operationId: "getUserById" }, values: { path: { id: "2" } } },
{ target: { operationId: "getUserById" }, values: { path: { id: "3" } } },
],
{
serverUrl: "https://api.example.com",
auth: { type: "bearer", token: "your-token" },
},
);
batchResult.results.forEach((r, i) => {
if ("error" in r) {
console.log(`Request ${i} failed:`, r.error);
} else {
console.log(`Request ${i} status:`, r.response.status);
}
});
2. Débogueur pour les scripts
createDebugger(config?) renvoie un ProtoKit pour l’automatisation, les scripts et la CI.
import { createDebugger } from "@powerduck/openapi-request";
const requestDebugger = createDebugger({
// Optional: custom adapter list
// adapters: [new HttpAdapter(), new WebSocketAdapter()],
// Optional: extra adapters added to the defaults
// extraAdapters: [new MyCustomAdapter()],
writeBackTruncated: true,
});
// Single request
const result = await requestDebugger.send({
spec,
target: { operationId: "getUserById" },
values: { path: { id: "42" } },
serverUrl: "https://api.example.com",
});
// Batch request
const batch = await requestDebugger.sendMany(
spec,
[
{ target: { operationId: "listUsers" } },
{ target: { operationId: "getUserById" }, values: { path: { id: "1" } } },
],
{ serverUrl: "https://api.example.com" },
);
// Export as Postman-compatible collection
const collection = requestDebugger.toCollection(spec, {
name: "My API Collection",
});
3. Sessions manuelles persistantes
createManualSession(options) renvoie une session duplex pour WebSocket, MCP ou gRPC.
import { createManualSession } from "@powerduck/openapi-request";
const session = createManualSession({
protocol: "websocket",
url: "wss://api.example.com/ws",
// For MCP:
// protocol: "mcp",
// transport: "http", // or "stdio"
// url: "https://api.example.com/mcp",
// For gRPC:
// protocol: "grpc",
// url: "localhost:50051",
});
// Open the connection
await session.open();
// Send a message
await session.send({ type: "message", data: "hello" });
// Subscribe to events
const unsubscribe = session.subscribe((event) => {
console.log("Event:", event.type, event.data);
});
// Close when done
await session.close();
unsubscribe();
Pour aller plus loin
- Référence de l’API — Toutes les fonctions et tous les types exportés.
- Configuration — Tous les champs de
SendOptions. - Exemples — Des exemples propres à chaque protocole.