Перейти к основному содержимому

Настройка

Настройка разделена на три уровня: параметры фабрики клиента или отладчика, объект SendOptions, передаваемый в prepare() и send(), и параметры отдельных протоколов.

Параметры фабрики​

CreateClientOptions​

Передаются в createClient(options?). Все поля необязательны.

ПолеТипОписание
writeBackWriteBackOptionsОпределяет, как ответы объединяются со спецификацией
responseToResponseOptionsОпределяет, как нормализуются объекты ответов
import { createClient } from "@powerduck/openapi-request";

const client = createClient({
writeBack: {
overwriteExamples: true,
// ... other WriteBackOptions
},
response: {
includeExamples: false,
// ... other ToResponseOptions
},
});

DebuggerOptions​

Передаются в createDebugger(config?). Все поля необязательны.

ПолеТипОписание
adaptersProtocolAdapter[]Список пользовательских адаптеров (полностью заменяет стандартные)
extraAdaptersProtocolAdapter[]Дополнительные адаптеры для стандартного реестра
writeBackWriteBackOptionsПараметры записи в спецификацию
responseToResponseOptionsПараметры нормализации ответов
writeBackTruncatedbooleanЗаписывать схему, выведенную из усечённого потока (по умолчанию: true)
import { createDebugger, HttpAdapter, WebSocketAdapter } from "@powerduck/openapi-request";

// Use only HTTP and WebSocket adapters
const debugger1 = createDebugger({
adapters: [new HttpAdapter(), new WebSocketAdapter()],
});

// Add a custom adapter to the defaults
const debugger2 = createDebugger({
extraAdapters: [new MyCustomAdapter()],
writeBackTruncated: true,
});

Запись в спецификацию и сохранённые примеры​

WriteBackOptions поддерживает strategy ("merge" или "replace", по умолчанию "merge"), keepExistingDescription (по умолчанию true), allowedStatusCodes (пустое значение означает все коды), protectComponentRefs (по умолчанию true), overwriteExamples (по умолчанию true) и requirePassingTests. Конвейер отправки проверяет условие успешного прохождения тестов; прямой вызов writeBackResponse этого не делает.

ToResponseOptions поддерживает includeExamples (по умолчанию true), maxExampleChars (по умолчанию 4000) и maxEventPreviewChars (по умолчанию 200). Отключите сохранение примеров или проверьте их перед публикацией: реальные ответы могут содержать учётные данные или персональную информацию.

Конвейер отправки обычно возвращает изменённую копию в patchedSpec; он не изменяет исходный документ и не сохраняет файл. Чтобы пропустить этот шаг, задайте writeBack: false для конкретного вызова. Объект writeBack фабрики настраивает объединение, а логическое значение на уровне вызова включает или отключает запись.

SendOptions​

Основной входной объект для prepare() и send(). В нём передаются спецификация, целевая операция, значения и все настройки запроса.

ПолеТипОбязательноОписание
specOpenApiDocumentДаПолный документ OpenAPI 3.2
targetOperationTargetДаИдентификатор операции (см. ниже)
valuesRequestValuesНетКонкретные значения пути, строки запроса, заголовков, cookie и тела
serverUrlstringНетПереопределяет spec.servers[0].url
serverVariablesRecord<string, string>НетПеременные шаблона URL сервера
variablesRecord<string, string>НетПеременные окружения, доступные через {{name}}
globalsRecord<string, string>НетГлобальные переменные в стиле Postman
localVariablesRecord<string, string>НетЛокальные переменные
collectionVariablesRecord<string, string>НетПеременные уровня коллекции
authAuthConfigНетНастройки аутентификации
scriptsScriptConfigНетСкрипты перед запросом и тестовые скрипты
runnerRuntimeRunOptionsНетПрямая передача всех параметров postman-runtime (наивысший приоритет)
websocketWebSocketOptionsНетПараметры WebSocket
graphqlGraphQLOptionsНетПараметры GraphQL
mcpMcpOptionsНетПараметры MCP
grpcanyНетПараметры gRPC
timeoutnumberНетТайм-аут отдельного запроса в мс (сокращённая запись для runner.timeout.request)

SendOptions также принимает следующие параметры выполнения и потоковой обработки:

ПолеТипОписание
fetchtypeof fetchИзолированный транспорт fetch, предоставленный приложением, где он поддерживается; HTTP/SSE по-прежнему используют postman-runtime.
writeBackbooleanЗначение false оставляет patchedSpec неопределённым, но не мешает формированию responseFragment.
signalAbortSignalОтменяет выполнение или сбор выборки; при этом может вернуться частичный результат.
maxEventsnumberМаксимальное число сохраняемых событий потока.
maxStreamMsnumberМаксимальная длительность сбора выборки потока в миллисекундах.
maxResponseSizenumberОграничение размера ответа в байтах.
maxBufferCharsnumberЛимит буфера парсера SSE до границы события; по умолчанию 4194304 символа.
maxEventCharsnumberЛимит сохраняемых данных одного события SSE; по умолчанию 1048576 символов.
inheritEventIdbooleanНаследовать последний ID события SSE, если новый не указан; по умолчанию true. Для более строгого вывода схемы задайте false.
onEvent(event: StreamEvent) => voidПолучение событий потока.
onConsole(log: ConsoleLog) => voidПолучение вывода консоли скриптов.
onAssertion(assertion: AssertionResult) => voidПолучение результатов проверок.
onResponseStart(info: ResponseStartInfo) => voidПросмотр ранних заголовков HTTP/SSE и признака streaming.
onOpen(info) => voidПолучение сведений о соединении WebSocket: URL, протокол и заголовки.

Адаптеры протоколов могут по-разному трактовать ограничения. Обработчики интерфейса должны оставаться лёгкими; исключения из обработчиков перехватывает слой выполнения. Для настроек отправителя HTTP-запросов используйте runner.requester; если указан maxResponseSize, он должен быть положительным, а не нулевым.

OperationTarget​

Определяет одну операцию. Предпочтительно использовать либо operationId, либо method + path. Если указаны оба варианта, приоритет имеет operationId.

ПолеТипОписание
operationIdstringАльтернативный ключ поиска; имеет приоритет над парой путь + метод
methodstringМетод HTTP без учёта регистра. Требует path.
pathstringШаблон пути, например /users/{id}. Требует method.
// By operationId (recommended)
const result1 = await client.send({
spec,
target: { operationId: "getUserById" },
});

// By method + path
const result2 = await client.send({
spec,
target: { method: "GET", path: "/users/{id}" },
});

RequestValues​

Конкретные значения, подставляемые в сформированный запрос.

ПолеТипОписание
pathRecord<string, unknown>Значения параметров пути
queryRecord<string, unknown>Значения параметров строки запроса
headerRecord<string, unknown>Значения заголовков
cookieRecord<string, unknown>Значения cookie
querystringstringГотовая закодированная строка запроса (расположение querystring в OpenAPI 3.2)
bodyunknownТело запроса
contentTypestringПринудительный выбор типа содержимого запроса, если операция объявляет несколько типов
const result = await client.send({
spec,
target: { operationId: "updateUser" },
values: {
path: { id: "42" },
query: { version: "2" },
header: { "X-Request-Id": "abc-123" },
body: { name: "Alice", email: "alice@example.com" },
contentType: "application/json",
},
});

AuthConfig​

ПолеТипОписание
typeAuthConfig["type"]Тип аутентификации
tokenstringТокен Bearer (для type: "bearer")
usernamestringИмя пользователя Basic (для type: "basic")
passwordstringПароль Basic (для type: "basic")
keystringИмя ключа API (для type: "apikey")
valuestringЗначение ключа API (для type: "apikey")
in"header" | "query"Расположение ключа API (для type: "apikey")
// Bearer token
const result1 = await client.send({
spec,
target: { operationId: "getUser" },
auth: { type: "bearer", token: "your-jwt-token" },
});

// Basic auth
const result2 = await client.send({
spec,
target: { operationId: "getUser" },
auth: { type: "basic", username: "admin", password: "secret" },
});

// API key in header
const result3 = await client.send({
spec,
target: { operationId: "getUser" },
auth: { type: "apikey", key: "X-API-Key", value: "key-123", in: "header" },
});

Расширенные типы аутентификации: digest, oauth1, oauth2, jwt, hawk, aws4, ntlm, asap и edgegrid. Поля соответствующих механизмов Postman для HTTP/SSE/GraphQL передаются через parameters: Record<string, string | boolean | number>. Необязательное поле oauth2: OAuth2FlowConfig включает получение и обновление токенов для типа OAuth 2.0; не следует считать, что каждый механизм аутентификации применим ко всем протоколам.

ScriptConfig​

ПолеТипОписание
collectionPreRequestScriptSource | ScriptSource[]Скрипты перед запросом на уровне коллекции
collectionTestScriptSource | ScriptSource[]Тестовые скрипты на уровне коллекции
preRequestScriptSource | ScriptSource[]Скрипты перед запросом на уровне запроса
testScriptSource | ScriptSource[]Тестовые скрипты на уровне запроса
fromSpecExtensionsbooleanЧитать x-postman-scripts из спецификации (по умолчанию: true)
captureLastResponsebooleanДобавить встроенный помощник, предоставляющий последний ответ последующим запросам

ScriptSource:

interface ScriptSource {
exec: string | string[]; // Script body, either a single string or array of lines
id?: string; // Optional identifier surfaced in script results
}

Задайте scripts.fromSpecExtensions: false, если не собираетесь выполнять скрипты, встроенные в импортированную спецификацию. Текущее значение по умолчанию — true; не рассчитывайте на его изменение в будущем.

Параметры отдельных протоколов​

HTTP / SSE​

HTTP — адаптер по умолчанию. Объявленное содержимое text/event-stream указывает на предполагаемое использование SSE; после получения заголовков также классифицируется реальный ответ. probeStreamingResponse() — отдельная явная проверка, а не автоматическое предварительное действие при каждом вызове.

Для обычных HTTP-запросов дополнительная настройка не нужна. Расширенные настройки postman-runtime задаются через SendOptions.runner.

WebSocket​

import { createManualSession } from "@powerduck/openapi-request";

const session = createManualSession({
kind: "websocket",
url: "wss://api.example.com/ws",
// Manual-session options are distinct from SendOptions.websocket.
});

MCP​

import { createManualSession } from "@powerduck/openapi-request";

const session = createManualSession({
kind: "mcp",
endpoint: "https://api.example.com/mcp",
});

Ручная сессия MCP по умолчанию использует Streamable HTTP и endpoint. Для stdio передайте kind: "mcp", transport: "stdio", локальную команду command и необязательные args; запуск сессии запускает настроенный процесс.

gRPC​

Для gRPC нужны адрес, источник дескрипторов (файлы .proto или серверная рефлексия), полное имя сервиса и метод:

import { createManualSession } from "@powerduck/openapi-request";

const session = createManualSession({
kind: "grpc",
address: "localhost:50051",
service: "powerduck.examples.Echo",
method: "Echo",
protoPaths: ["./echo.proto"],
});

Фабрики ручных сессий возвращают ещё не открытое соединение. Перед отправкой вызовите open(), а при освобождении ресурсов — close(). Пример gRPC требует соответствующего локального сервера и proto-файла; параметры ручной сессии отличаются от объекта SendOptions.grpc.

Полный пример​

import { createClient } from "@powerduck/openapi-request";

const client = createClient({
writeBack: { overwriteExamples: true },
});

const result = await client.send({
spec: openApiDocument,
target: { operationId: "updateUser" },
values: {
path: { id: "42" },
query: { verbose: "true" },
header: { "X-Request-Id": "req-abc" },
body: { name: "Alice", email: "alice@example.com" },
},
serverUrl: "https://api.staging.example.com",
auth: { type: "bearer", token: "staging-token" },
timeout: 10000,
variables: {
environment: "staging",
},
});

console.log(result.response.status);
console.log(result.response.body);
console.log(result.response.headers);

Дальнейшие шаги​

  • Все экспортируемые типы описаны в справочнике API
  • Сценарии для отдельных протоколов приведены в разделе Примеры