@powerduck/openapi-request の概要
@powerduck/openapi-request は、OpenAPI 3.2 に対応したコレクションデバッガーとリクエスト実行ライブラリです。OpenAPI 文書からリクエストを組み立てて送信し、ストリーミング応答を識別して、実際の応答に基づく更新済み文書を生成できます。コンパクトなインターフェースで 6 種類の通信プロトコルを扱えます。
- パッケージ名:
@powerduck/openapi-request - バージョン:
- ライセンス: MIT
- モジュール形式: 型宣言を同梱した ESM と CommonJS の両ビルドを提供します。
用途
このライブラリは、同じ文書を基準として次の 3 つの用途に対応します。
- GUI 向けクライアント —
createClient()は、prepare()、send()、connect()、discover()、writeback()を持つオブジェクトを返します。各メソッドは、グラフィカルなリクエストエディターの操作手順に対応しています。 - スクリプトで操作するデバッガー —
createDebugger()は、自動化、スクリプト、CI に使えるsend()、sendMany()、toCollection()を持つProtoKitを返します。 - 手動で管理する長時間セッション —
createManualSession()は、接続開始・送信・終了とイベントストリームを備えた双方向セッションオブジェクトを返します。WebSocket、MCP、gRPC で構造が共通のため、同じ画面で 3 種類を扱えます。
プロトコルアダプター
コアは特定のトランスポートに依存しません。各プロトコルの動作は、AdapterRegistry に登録したアダプターが提供します。
- HTTP / SSE — 標準で対応しています。通常の JSON リクエストと Server-Sent Events のストリームを、宣言されたコンテンツタイプまたは実際の応答ヘッダーから自動判定します。
- WebSocket — 共通のイベント形式で、テキストとバイナリの双方向セッションを扱います。
- gRPC —
.protoファイルまたはサーバーリフレクションを使い、単項、サーバーストリーミング、クライアントストリーミング、双方向ストリーミングを呼び出します。 - MCP — Streamable HTTP または stdio 経由で Model Context Protocol のツールを呼び出します。
- GraphQL — イントロスペクション、操作の生成と実行に対応します。
主な機能
- OpenAPI 3.2 コレクションモデル —
operationIdまたはmethod+pathで操作を特定し、パラメーター、リクエストボディ、例からリクエストを組み立てます。 - ストリーミング検出 —
isStreamingOperation()、isSseContentType()、isStreamingContentType()は宣言されたコンテンツタイプで応答を分類し、probeStreamingResponse()は実際の応答ヘッダーを調べます。 - 応答の書き戻し —
inferSchema()、mergeSchema()、toResponseObject()、writeBackResponse()は応答スキーマを推定し、更新済み文書を返します。既定では、書き戻しが成功するとsend()はその文書をpatchedSpecとして返します。writeBack: falseを設定すると無効になります。入力文書は変更されず、ファイルも自動保存されません。結果を保存する前に、writeBackSkippedReasonとwriteBackWarningsを確認してください。 - スキーマ補助機能 —
sampleFromSchema()はスキーマからサンプルデータを生成します。 - 大きな依存パッケージの遅延読み込み — gRPC(
@grpc/grpc-js、@grpc/proto-loader)と MCP(@modelcontextprotocol/sdk)は初回使用時に読み込まれるため、HTTP のみを使う場合は読み込みコストがかかりません。
インストール
npm install @powerduck/openapi-request
クイックスタート
import { createClient } from "@powerduck/openapi-request";
const spec = {
openapi: "3.2.0",
info: { title: "Users", version: "1.0.0" },
paths: {
"/users/{id}": {
get: {
operationId: "getUserById",
parameters: [{ name: "id", in: "path", required: true, schema: { type: "string" } }],
responses: { "200": { description: "User" } },
},
},
},
};
const client = createClient();
const plan = client.prepare({
spec,
target: { operationId: "getUserById" },
});
const result = await client.send({
spec,
target: { operationId: "getUserById" },
values: { path: { id: "42" } },
serverUrl: "https://api.example.com",
});
次のステップ
- インストール — パッケージ構成、サブパスのエクスポート、プロトコル機能のピア依存関係。
- クイックスタート — 最初のリクエスト、デバッガーの実行、手動セッション。
- 設定 —
CreateClientOptions、DebuggerOptions、プロトコル別の設定。 - API リファレンス — 機能別にまとめた全エクスポート。
- 使用例 — HTTP、SSE、WebSocket、GraphQL、MCP、gRPC の実行可能な例。
ライセンス
MIT.