api-contract-testing · secondsky — скилл для Claude Code
Скилл помогает проверять контракты API между микросервисами через Pact и схемы OpenAPI без развёртывания полного сквозного окружения.
npx skills add secondsky/claude-skills --skill api-contract-testing -a claude-codeЧто делает 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-code2Вручную: положить файлы
~/.claude/skills/api-contract-testing/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/api-contract-testing/
1Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill api-contract-testing -a codex2Вручную: положить файлы
.agents/skills/api-contract-testing/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill api-contract-testing -a cursor2Вручную: положить файлы
.cursor/skills/api-contract-testing/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install secondsky/claude-skills api-contract-testing2Вручную: положить файлы
.github/skills/api-contract-testing/SKILL.md1Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill api-contract-testing -a gemini-cli2Командой платформы
gemini skills install https://github.com/secondsky/claude-skills --path plugins/api-contract-testing/skills/api-contract-testingВручную: положить файлы
.devin/skills/api-contract-testing/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill api-contract-testing -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в 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 от других авторов.