К основному содержанию
скилл CX Codex

api-contract-testing · secondsky — скилл для Claude Code

Скилл помогает проверять контракты API между микросервисами через Pact и схемы OpenAPI без развёртывания полного сквозного окружения.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add secondsky/claude-skills --skill api-contract-testing -a claude-code
Открыть на GitHub

Что делает api-contract-testing

Скилл формулирует правила проверки взаимодействия между сервисом-потребителем и поставщиком данных. В инструкциях собраны примеры потребительских тестов на TypeScript с библиотекой @pact-foundation/pact, валидация маршрутов Express через express-openapi-validator, а также ссылки на реализации для Python и Java.

Подход исключает тяжёлые интеграционные тесты: контракт фиксирует структуру запроса и ответа через гибкие матчеры, не привязываясь к конкретным значениям полей. Для верификации на стороне провайдера потребуется запущенный сервис и адрес брокера в переменной окружения PACT_BROKER_URL.

Какие задачи решает

  • защитить микросервисы от несовместимых изменений в API
  • протестировать контракт потребителя без запуска полного контура интеграции
  • настроить валидацию спецификации OpenAPI в маршрутах Express
  • проверить ответы провайдера через Pact Broker в CI

Примеры запросов агенту

  • Напиши тест потребителя на Pact для эндпоинта GET /users/123
  • Добавь валидацию схемы openapi.yaml в приложение Express
  • Настрой верификацию контрактов провайдера UserService с отправкой отчёта в Pact Broker

Как установить api-contract-testing

1Через Skills CLI (Vercel)

npx skills add secondsky/claude-skills --skill api-contract-testing -a claude-code

2Вручную: положить файлы

~/.claude/skills/api-contract-testing/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/api-contract-testing/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о api-contract-testing

Как установить api-contract-testing в Claude Code?

Выполните команду npx skills add secondsky/claude-skills --skill api-contract-testing -a claude-code. Конфигурация запишется по пути ~/.claude/skills/api-contract-testing/SKILL.md.

Что делает скилл api-contract-testing?

Он направляет модель при составлении тестов контрактов между микросервисами. Скилл помогает валидировать структуры запросов и ответов через Pact и схемы OpenAPI без сквозных тестов.

Какие инструменты упоминаются в материалах скилла?

В список входят Pact, Spring Cloud Contract, OpenAPI, Dredd и Spectral. В файлах также даны ссылки на примеры с JSON Schema в Python и REST Assured в Java.

Исходный текст

SKILL.md · MIT
---
name: api-contract-testing
description: Verifies API contracts between services using consumer-driven contracts, schema validation, and tools like Pact. Use when testing microservices communication, preventing breaking changes, or validating OpenAPI specifications.
license: MIT
---

# API Contract Testing

Verify that APIs honor their contracts between consumers and providers without requiring full integration tests.

## Key Concepts

| Term | Definition |
|------|------------|
| Consumer | Service that calls an API |
| Provider | Service that exposes an API |
| Contract | Agreed request/response format |
| Pact | Consumer-driven contract testing tool |
| Schema | Structure definition (OpenAPI, JSON Schema) |
| Broker | Central repository for contracts |

## Pact Consumer Test (TypeScript)

```typescript
import { PactV3, MatchersV3 } from '@pact-foundation/pact';

const provider = new PactV3({
  consumer: 'OrderService',
  provider: 'UserService'
});

describe('User API Contract', () => {
  it('returns user by ID', async () => {
    await provider
      .given('user 123 exists')
      .uponReceiving('a request for user 123')
      .withRequest({ method: 'GET', path: '/users/123' })
      .willRespondWith({
        status: 200,
        body: MatchersV3.like({
          id: '123',
          name: MatchersV3.string('John'),
          email: MatchersV3.email('[email protected]')
        })
      })
      .executeTest(async (mockServer) => {
        const response = await fetch(`${mockServer.url}/users/123`);
        expect(response.status).toBe(200);
      });
  });

  it('returns 404 for non-existent user', async () => {
    await provider
      .given('user does not exist')
      .uponReceiving('a request for non-existent user')
      .withRequest({ method: 'GET', path: '/users/999' })
      .willRespondWith({
        status: 404,
        body: MatchersV3.like({
          error: { code: 'NOT_FOUND', message: MatchersV3.string() }
        })
      })
      .executeTest(async (mockServer) => {
        const response = await fetch(`${mockServer.url}/users/999`);
        expect(response.status).toBe(404);
      });
  });
});
```

## Provider Verification

```typescript
import { Verifier } from '@pact-foundation/pact';

new Verifier({
  provider: 'UserService',
  providerBaseUrl: 'http://localhost:3000',
  pactBrokerUrl: process.env.PACT_BROKER_URL,
  publishVerificationResult: true,
  providerVersion: process.env.GIT_SHA,
  stateHandlers: {
    'user 123 exists': async () => {
      await db.users.create({ id: '123', name: 'John' });
    },
    'user does not exist': async () => {
      await db.users.deleteAll();
    }
  }
}).verifyProvider();
```

## OpenAPI Validation (Express)

```javascript
const OpenApiValidator = require('express-openapi-validator');

app.use(OpenApiValidator.middleware({
  apiSpec: './openapi.yaml',
  validateRequests: true,
  validateResponses: true,
  validateSecurity: true
}));
```

## Additional Implementations

- **Python JSON Schema**: See [references/python-json-schema.md](references/python-json-schema.md)
- **Java REST Assured**: See [references/java-rest-assured.md](references/java-rest-assured.md)
- **Pact Broker CI/CD**: See [references/pact-broker-cicd.md](references/pact-broker-cicd.md)

## Best Practices

**Do:**
- Test from consumer perspective
- Use matchers for flexible matching
- Validate structure, not specific values
- Version contracts explicitly
- Test error responses
- Run tests in CI pipeline
- Test backward compatibility

**Don't:**
- Test business logic in contracts
- Hard-code specific values
- Skip error scenarios
- Ignore versioning
- Deploy without verification

## Tools

- **Pact** - Multi-language consumer-driven contracts
- **Spring Cloud Contract** - JVM ecosystem
- **OpenAPI/Swagger** - Schema-first validation
- **Dredd** - API blueprint testing
- **Spectral** - OpenAPI linting

© secondsky · MIT · secondsky/claude-skills

Похожие скиллы

Все скиллы по теме «Бэкенд и API» →

Сначала — api-contract-testing от других авторов.

api-contract-testing aj-geddes Скилл настраивает проверку контрактов API между сервисами без запуска полных интеграционных тестов. Помогает избежать несовместимых правок в CI. CX Codex +1 913установок mcp-builder официальный anthropics Скилл проводит через создание MCP-сервера на TypeScript или Python: от изучения протокола до тестов и оценки качества. 130 949установок claude-api официальный anthropics Справочник по Anthropic SDK и API Claude для генерации кода без устаревших параметров и выдуманных методов. 74 198установок lark-im larksuite Скилл подключает Lark IM к агенту: он отправляет сообщения, ищет историю, управляет чатами и файлами. Подойдёт для задач вокруг командных коммуникаций. CX Codex +1 472 900установок lark-event larksuite Слушает события Lark/Feishu и отдаёт их потоком NDJSON. Подходит для ботов, обработчиков сообщений и долгих подписчиков. CX Codex +1 466 800установок caveman-discover JuliusBrussee Находит точки вызова LLM в репозитории и размечает их воркфлоу для Caveman Cloud, чтобы расходы на токены не сливались в одну общую кучу. CX Codex +1 104 400установок migration JuliusBrussee Скилл задаёт правила безопасных миграций схем, данных и API с обязательным откатом. Пригодится при изменениях, где нельзя терять данные или ломать совместимость. CX Codex +1 103 900установок

Из того же набора116

better-auth Помогает настроить аутентификацию Better Auth в Hono или Cloudflare D1. Подсказывает рабочие схемы для Drizzle ORM и предотвращает частые ошибки адаптеров базы данных. CX Codex +1 488установок api-security-hardening Скилл со слоями защиты для REST API на Express: лимиты запросов и валидация ввода. Пригодится перед выкладкой API в прод. CX Codex +1 487установок react-composition-patterns Набор архитектурных правил React для ИИ-агента. Помогает избавиться от десятков булевых пропсов, выстроить составные компоненты и изолировать состояние в провайдерах. CX Codex +1 481установок design-system-creation Скилл помогает агенту собрать дизайн-систему: токены, типографику, компоненты и документацию к ним. Пригодится, когда стандарты интерфейса нужно зафиксировать до начала вёрстки. CX Codex +1 481установок technical-specification Скилл ведёт агента по шаблону технической спецификации: требования, архитектура, API, план внедрения, тесты и риски. Пригодится, когда фичу планируют до кода. CX Codex +1 470установок mobile-app-testing Скилл для тестирования мобильных приложений: юнит-тесты, UI-автоматизация, E2E и производительность. Пригодится, когда нужно настроить тестовую инфраструктуру. CX Codex +1 467установок bun-test-basics Скилл подсказывает синтаксис bun:test: ассерты, describe/it, модификаторы skip, only, each и запуск тестов. CX Codex +1 458установок threejs Скилл с готовыми примерами и справочниками по Three.js: сцены, материалы, свет, шейдеры, загрузка GLTF. Пригодится, когда собираете 3D в браузере. CX Codex +1 460установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой