GitScrum / Docs
All Best Practices

API-First Development | Design Before Implementation Guide

Design API contracts before coding. Enable parallel frontend/backend work with OpenAPI specs, mock servers, and contract testing. Reduce integration surprises.

8 min read

API-first development starts with the contract. GitScrum helps teams coordinate API design and track implementation against agreed specifications.

API-First Approach

Design Before Build

API-FIRST WORKFLOW:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚ TRADITIONAL (CODE-FIRST):                                   β”‚
β”‚ ─────────────────────────                                   β”‚
β”‚                                                             β”‚
β”‚ Backend builds β†’ Frontend waits β†’ Integration β†’ Rework    β”‚
β”‚      β”‚                                β”‚                     β”‚
β”‚      └─ API shape unknown β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚
β”‚                                                             β”‚
β”‚ PROBLEM: Frontend blocked, late integration issues        β”‚
β”‚                                                             β”‚
β”‚ ─────────────────────────────────────────────────────────── β”‚
β”‚                                                             β”‚
β”‚ API-FIRST:                                                  β”‚
β”‚ ──────────                                                  β”‚
β”‚                                                             β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚  Design  │──→│ Contract │──→│ Parallel │──→│Integrate β”‚ β”‚
β”‚ β”‚   API    β”‚   β”‚  Agreed  β”‚   β”‚   Work   β”‚   β”‚  & Test  β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                      β”‚              β”‚                       β”‚
β”‚                      β”‚         β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”                  β”‚
β”‚                      β”‚         β”‚         β”‚                  β”‚
β”‚                      β”‚    Frontend  Backend                 β”‚
β”‚                      β”‚    (with mock) (real)                β”‚
β”‚                      β”‚         β”‚         β”‚                  β”‚
β”‚                      β”‚         β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                  β”‚
β”‚                      β”‚              β”‚                       β”‚
β”‚                      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
β”‚                        Same contract                        β”‚
β”‚                                                             β”‚
β”‚ BENEFIT: Both teams work in parallel                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

API Design Process

API DESIGN WORKFLOW:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚ STEP 1: IDENTIFY CONSUMERS                                 β”‚
β”‚ ─────────────────────────                                   β”‚
β”‚ β€’ Who will use this API?                                  β”‚
β”‚ β€’ Web frontend, mobile app, third parties?                β”‚
β”‚ β€’ What do they need?                                       β”‚
β”‚                                                             β”‚
β”‚ STEP 2: DESIGN ENDPOINTS                                   β”‚
β”‚ ────────────────────────                                    β”‚
β”‚ β€’ Resources and operations                                 β”‚
β”‚ β€’ Request/response shapes                                  β”‚
β”‚ β€’ Error formats                                            β”‚
β”‚ β€’ Authentication                                           β”‚
β”‚                                                             β”‚
β”‚ STEP 3: DOCUMENT IN SPEC                                   β”‚
β”‚ ────────────────────────                                    β”‚
β”‚ β€’ OpenAPI for REST                                         β”‚
β”‚ β€’ GraphQL SDL                                              β”‚
β”‚ β€’ Machine-readable format                                  β”‚
β”‚                                                             β”‚
β”‚ STEP 4: REVIEW WITH CONSUMERS                              β”‚
β”‚ ─────────────────────────────                               β”‚
β”‚ β€’ Share spec with frontend/consumers                      β”‚
β”‚ β€’ Gather feedback                                          β”‚
β”‚ β€’ Iterate on design                                        β”‚
β”‚                                                             β”‚
β”‚ STEP 5: FINALIZE CONTRACT                                  β”‚
β”‚ ─────────────────────────                                   β”‚
β”‚ β€’ Agreed spec becomes source of truth                     β”‚
β”‚ β€’ Generate mock server                                    β”‚
β”‚ β€’ Both teams begin work                                   β”‚
β”‚                                                             β”‚
β”‚ ─────────────────────────────────────────────────────────── β”‚
β”‚                                                             β”‚
β”‚ API DESIGN TASK:                                            β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚ API-010: Design Order API                               β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ CONSUMERS:                                               β”‚β”‚
β”‚ β”‚ β€’ Web checkout (primary)                               β”‚β”‚
β”‚ β”‚ β€’ Mobile app                                           β”‚β”‚
β”‚ β”‚ β€’ Admin dashboard                                      β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ ENDPOINTS PROPOSED:                                      β”‚β”‚
β”‚ β”‚ POST   /orders           Create order                  β”‚β”‚
β”‚ β”‚ GET    /orders/{id}      Get order details             β”‚β”‚
β”‚ β”‚ PATCH  /orders/{id}      Update order                  β”‚β”‚
β”‚ β”‚ GET    /orders           List user's orders            β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ STATUS: Review with frontend team                      β”‚β”‚
β”‚ β”‚ REVIEW DATE: Jan 25                                     β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

OpenAPI Specification

Contract Definition

OPENAPI SPECIFICATION:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚ EXAMPLE OPENAPI SPEC:                                       β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚ openapi: 3.0.0                                          β”‚β”‚
β”‚ β”‚ info:                                                    β”‚β”‚
β”‚ β”‚   title: Orders API                                     β”‚β”‚
β”‚ β”‚   version: 1.0.0                                        β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ paths:                                                   β”‚β”‚
β”‚ β”‚   /orders:                                              β”‚β”‚
β”‚ β”‚     post:                                               β”‚β”‚
β”‚ β”‚       summary: Create a new order                      β”‚β”‚
β”‚ β”‚       requestBody:                                      β”‚β”‚
β”‚ β”‚         content:                                        β”‚β”‚
β”‚ β”‚           application/json:                             β”‚β”‚
β”‚ β”‚             schema:                                     β”‚β”‚
β”‚ β”‚               $ref: '#/components/schemas/CreateOrder' β”‚β”‚
β”‚ β”‚       responses:                                        β”‚β”‚
β”‚ β”‚         201:                                            β”‚β”‚
β”‚ β”‚           description: Order created                   β”‚β”‚
β”‚ β”‚           content:                                      β”‚β”‚
β”‚ β”‚             application/json:                           β”‚β”‚
β”‚ β”‚               schema:                                   β”‚β”‚
β”‚ β”‚                 $ref: '#/components/schemas/Order'     β”‚β”‚
β”‚ β”‚         400:                                            β”‚β”‚
β”‚ β”‚           description: Invalid request                 β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ components:                                              β”‚β”‚
β”‚ β”‚   schemas:                                              β”‚β”‚
β”‚ β”‚     CreateOrder:                                        β”‚β”‚
β”‚ β”‚       type: object                                      β”‚β”‚
β”‚ β”‚       required: [items, shippingAddress]               β”‚β”‚
β”‚ β”‚       properties:                                       β”‚β”‚
β”‚ β”‚         items:                                          β”‚β”‚
β”‚ β”‚           type: array                                   β”‚β”‚
β”‚ β”‚           items:                                        β”‚β”‚
β”‚ β”‚             $ref: '#/components/schemas/OrderItem'     β”‚β”‚
β”‚ β”‚         shippingAddress:                                β”‚β”‚
β”‚ β”‚           $ref: '#/components/schemas/Address'         β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                                             β”‚
β”‚ SPEC BECOMES:                                               β”‚
β”‚ β€’ Documentation (SwaggerUI)                               β”‚
β”‚ β€’ Mock server (for frontend)                              β”‚
β”‚ β€’ Client SDKs (generated)                                 β”‚
β”‚ β€’ Contract tests (validation)                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Parallel Development

Using Mock Servers

MOCK SERVER WORKFLOW:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚ FROM SPEC TO MOCK:                                          β”‚
β”‚ ──────────────────                                          β”‚
β”‚                                                             β”‚
β”‚ OpenAPI Spec β†’ Mock Server Generator β†’ Mock API           β”‚
β”‚                                                             β”‚
β”‚ TOOLS:                                                      β”‚
β”‚ β€’ Prism (Stoplight)                                       β”‚
β”‚ β€’ Mockoon                                                  β”‚
β”‚ β€’ WireMock                                                 β”‚
β”‚ β€’ MSW (Mock Service Worker)                               β”‚
β”‚                                                             β”‚
β”‚ ─────────────────────────────────────────────────────────── β”‚
β”‚                                                             β”‚
β”‚ PARALLEL WORKFLOW:                                          β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ DAY 1:                                                  β”‚β”‚
β”‚ β”‚ API spec agreed ────→ Mock server deployed            β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ DAY 2-10:                                               β”‚β”‚
β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚β”‚
β”‚ β”‚ β”‚    Frontend    β”‚    β”‚    Backend     β”‚              β”‚β”‚
β”‚ β”‚ β”‚                β”‚    β”‚                β”‚              β”‚β”‚
β”‚ β”‚ β”‚ Builds against β”‚    β”‚ Implements     β”‚              β”‚β”‚
β”‚ β”‚ β”‚ mock API       β”‚    β”‚ real API       β”‚              β”‚β”‚
β”‚ β”‚ β”‚                β”‚    β”‚                β”‚              β”‚β”‚
β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚β”‚
β”‚ β”‚         β”‚                     β”‚                        β”‚β”‚
β”‚ β”‚         β”‚ Uses mock           β”‚ Matches spec          β”‚β”‚
β”‚ β”‚         β”‚                     β”‚                        β”‚β”‚
β”‚ β”‚         β–Ό                     β–Ό                        β”‚β”‚
β”‚ β”‚ DAY 11: Integration                                    β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ Frontend ─────────────→ Real Backend                  β”‚β”‚
β”‚ β”‚         (switch from mock)                             β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ RESULT: Both complete, integration smooth             β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                                             β”‚
β”‚ MOCK CONFIG:                                                β”‚
β”‚ ───────────                                                 β”‚
β”‚ Development: Use mock server                              β”‚
β”‚ Staging: Use real backend                                 β”‚
β”‚ Production: Use real backend                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Contract Testing

Ensuring Compatibility

CONTRACT TESTING:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚ THE PROBLEM:                                                β”‚
β”‚ ────────────                                                β”‚
β”‚ Backend changes API slightly                              β”‚
β”‚ Frontend doesn't know                                     β”‚
β”‚ Production breaks                                          β”‚
β”‚                                                             β”‚
β”‚ THE SOLUTION:                                               β”‚
β”‚ ─────────────                                               β”‚
β”‚ Contract tests verify both sides match the spec          β”‚
β”‚                                                             β”‚
β”‚ ─────────────────────────────────────────────────────────── β”‚
β”‚                                                             β”‚
β”‚ CONTRACT TEST APPROACHES:                                   β”‚
β”‚                                                             β”‚
β”‚ PROVIDER TESTING:                                           β”‚
β”‚ Test that backend matches spec                            β”‚
β”‚                                                             β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚ test('POST /orders matches spec', () => {              β”‚β”‚
β”‚ β”‚   const response = api.post('/orders', validOrder);   β”‚β”‚
β”‚ β”‚   expect(response).toMatchOpenAPISpec('/orders');     β”‚β”‚
β”‚ β”‚ });                                                     β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                                             β”‚
β”‚ CONSUMER TESTING:                                           β”‚
β”‚ Test that frontend expectations match spec                β”‚
β”‚                                                             β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚ test('checkout expects order response', () => {       β”‚β”‚
β”‚ β”‚   const expectations = checkout.getApiExpectations(); β”‚β”‚
β”‚ β”‚   expect(expectations).toBeValidAgainstSpec();        β”‚β”‚
β”‚ β”‚ });                                                     β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                                             β”‚
β”‚ TOOLS:                                                      β”‚
β”‚ β€’ Pact (consumer-driven contracts)                        β”‚
β”‚ β€’ Dredd (test API against spec)                           β”‚
β”‚ β€’ Spectral (lint OpenAPI specs)                           β”‚
β”‚                                                             β”‚
β”‚ IN CI:                                                      β”‚
β”‚ ─────                                                       β”‚
β”‚ PR to backend β†’ Contract tests run β†’ Block if breaking   β”‚
β”‚                                                             β”‚
β”‚ Prevents accidental breaking changes                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Versioning APIs

Managing Changes

API VERSIONING:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚ VERSIONING STRATEGIES:                                      β”‚
β”‚ ──────────────────────                                      β”‚
β”‚                                                             β”‚
β”‚ URL PATH:                                                   β”‚
β”‚ /v1/orders                                                 β”‚
β”‚ /v2/orders                                                 β”‚
β”‚ Clear, explicit, easy to route                            β”‚
β”‚                                                             β”‚
β”‚ HEADER:                                                     β”‚
β”‚ X-API-Version: 2                                           β”‚
β”‚ Accept: application/vnd.api.v2+json                       β”‚
β”‚ Cleaner URLs, more complex                                β”‚
β”‚                                                             β”‚
β”‚ ─────────────────────────────────────────────────────────── β”‚
β”‚                                                             β”‚
β”‚ BREAKING VS NON-BREAKING:                                   β”‚
β”‚                                                             β”‚
β”‚ NON-BREAKING (no new version needed):                      β”‚
β”‚ βœ… Adding new optional field                               β”‚
β”‚ βœ… Adding new endpoint                                     β”‚
β”‚ βœ… Adding new optional query param                         β”‚
β”‚                                                             β”‚
β”‚ BREAKING (needs new version):                              β”‚
β”‚ ❌ Removing field                                           β”‚
β”‚ ❌ Changing field type                                      β”‚
β”‚ ❌ Removing endpoint                                        β”‚
β”‚ ❌ Changing required fields                                 β”‚
β”‚                                                             β”‚
β”‚ ─────────────────────────────────────────────────────────── β”‚
β”‚                                                             β”‚
β”‚ DEPRECATION PROCESS:                                        β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚ β”‚ DEPRECATION: /v1/orders endpoint                       β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ TIMELINE:                                                β”‚β”‚
β”‚ β”‚ Jan 1:  v2 released, v1 deprecated                    β”‚β”‚
β”‚ β”‚ Feb 1:  Deprecation warnings in v1 responses          β”‚β”‚
β”‚ β”‚ Mar 1:  v1 returns 410 Gone                           β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ COMMUNICATION:                                           β”‚β”‚
β”‚ β”‚ β€’ Changelog published                                  β”‚β”‚
β”‚ β”‚ β€’ Migration guide provided                             β”‚β”‚
β”‚ β”‚ β€’ Consumers notified via email                         β”‚β”‚
β”‚ β”‚ β€’ Deprecation header in responses                      β”‚β”‚
β”‚ β”‚                                                         β”‚β”‚
β”‚ β”‚ MIGRATION SUPPORT:                                       β”‚β”‚
β”‚ β”‚ β€’ v1 β†’ v2 mapping documented                          β”‚β”‚
β”‚ β”‚ β€’ SDKs updated                                         β”‚β”‚
β”‚ β”‚ β€’ Test environment available                           β”‚β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Related Solutions