The Challenge
API breaking changes were causing integration failures between services. Frontend teams would discover backend contract changes only after deployment, leading to production incidents and delayed releases.
The organization needed a shift-left approach to catch API contract violations early in the development cycle, before changes reached staging or production environments.
200+
API Endpoints Covered
95%
Contract Coverage
Zero
Breaking Changes in Prod
Technical Solution
Implemented comprehensive API contract testing using Playwright's API testing capabilities with schema validation.
tests/api/users.spec.ts
TypeScript
import { test, expect } from '@playwright/test'; import { UserSchema } from './schemas/user.schema'; test.describe('Users API Contract', () => { test('GET /api/users returns valid schema', async ({ request }) => { const response = await request.get('/api/users'); // Status code validation expect(response.status()).toBe(200); // Content-Type validation expect(response.headers()['content-type']) .toContain('application/json'); // Schema validation const data = await response.json(); const validation = UserSchema.safeParse(data); expect(validation.success).toBe(true); }); test('POST /api/users validates required fields', async ({ request }) => { const response = await request.post('/api/users', { data: { email: 'invalid' } // Missing required fields }); expect(response.status()).toBe(400); }); });
Key Implementation Details
- Schema validation using Zod for type-safe contract definitions
- Request/response header validation for content negotiation
- Error response structure validation for consistent error handling
- Authentication flow testing with token refresh scenarios
- Rate limiting and pagination contract verification
Tech Stack
Playwright
API Testing Framework
TypeScript
Type-Safe Contracts
REST APIs
HTTP Protocol Testing
Zod
Schema Validation
Impact & Results
- Eliminated breaking changes in production through early contract violation detection
- Reduced integration testing time by 60% with automated contract validation
- Improved cross-team communication with shared contract definitions
- Faster API development with confidence in backward compatibility
- Self-documenting APIs through schema-as-code approach