api-contract-testing
APIサービス間のコントラクトを検証し、互換性の確保と破壊的変更の防止を行います。コントラクトテスト、Pact、APIコントラクト検証、スキーマ検証、コンシューマー駆動コントラクトに活用できます。
description の原文を見る
> Verify API contracts between services to ensure compatibility and prevent breaking changes. Use for contract testing, Pact, API contract validation, schema validation, and consumer-driven contracts.
SKILL.md 本文
API コントラクトテスト
目次
概要
コントラクトテストは、コンシューマーとプロバイダー間の API コントラクトが守られていることを検証します。全体の統合テストを必要とせずに、サービスの変更が依存するコンシューマーを壊さないようにします。コントラクトテストはリクエスト/レスポンス形式、データ型、API の動作を個別に検証します。
使用する場合
- マイクロサービス通信のテスト
- 破壊的な API 変更の防止
- API バージョニングの検証
- コンシューマー・プロバイダーコントラクトのテスト
- 下位互換性の確保
- OpenAPI/Swagger 仕様の検証
- サードパーティ API 統合のテスト
- CI でコントラクト違反をキャッチ
クイックスタート
最小限の実行可能な例:
// tests/pact/user-service.pact.test.ts
import { PactV3, MatchersV3 } from "@pact-foundation/pact";
import { UserService } from "../../src/services/UserService";
const { like, eachLike, iso8601DateTimeWithMillis } = MatchersV3;
const provider = new PactV3({
consumer: "OrderService",
provider: "UserService",
port: 1234,
dir: "./pacts",
});
describe("User Service Contract", () => {
const userService = new UserService("http://localhost:1234");
describe("GET /users/:id", () => {
test("returns user when found", async () => {
await provider
.given("user with ID 123 exists")
.uponReceiving("a request for user 123")
.withRequest({
method: "GET",
path: "/users/123",
headers: {
// ... (詳細な実装はリファレンスガイドを参照)
リファレンスガイド
references/ ディレクトリ内の詳細な実装:
| ガイド | 内容 |
|---|---|
コンシューマー駆動コントラクト向け Pact | コンシューマー駆動コントラクト向け Pact |
OpenAPI スキーマ検証 | OpenAPI スキーマ検証 |
JSON スキーマ検証 | JSON スキーマ検証 |
Java 向け REST Assured | Java 向け REST Assured |
Postman によるコントラクトテスト | Postman によるコントラクトテスト |
Pact Broker 統合 | Pact Broker 統合 |
ベストプラクティス
✅ DO
- コンシューマーの観点からコントラクトをテストする
- 柔軟なマッチング用にマッチャーを使用する
- 特定の値ではなくスキーマ構造を検証する
- コントラクトをバージョン管理する
- エラーレスポンスをテストする
- コントラクト共有用に Pact Broker を使用する
- CI でコントラクトテストを実行する
- 下位互換性をテストする
❌ DON'T
- コントラクトテストでビジネスロジックをテストしない
- コントラクトに特定の値をハードコードしない
- エラーシナリオをスキップしない
- コントラクトテストで UI をテストしない
- コントラクトバージョニングを無視しない
- コントラクト検証なしでデプロイしない
- 実装詳細をテストしない
- コントラクトテストをモックしない
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- aj-geddes
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/aj-geddes/useful-ai-prompts / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。