API Architecture and Integration Design · API Styles and Contracts

OpenAPI and Contract-First Development

Design the contract first, then generate docs, mocks, clients and tests.

Create a free account to save this page, take notes and track your progress. Sign in

An OpenAPI document describes endpoints, schemas, auth and errors. In contract-first development, teams review the spec before coding; then generate documentation, mock servers for frontend work, typed clients/SDKs, and validate requests/responses in tests. Lint specs (Spectral) for style rules and detect breaking changes in CI (oasdiff).

openapi: 3.1.0
info: { title: Orders API, version: 1.4.0 }
paths:
  /v1/orders/{id}:
    get:
      operationId: getOrder
      parameters: [{ name: id, in: path, required: true, schema: { type: string } }]
      responses:
        "200": { content: { application/json: { schema: { $ref: "#/components/schemas/Order" } } } }
        "404": { content: { application/problem+json: { schema: { $ref: "#/components/schemas/Problem" } } } }
components:
  schemas:
    Order:
      type: object
      required: [id, status, total]
      properties:
        id: { type: string }
        status: { type: string, enum: [pending, paid, shipped, cancelled] }
        total: { $ref: "#/components/schemas/Money" }

Common pitfalls

  • Specs written after the fact and drifting from behavior.
  • No breaking-change detection in CI.
  • Undocumented error responses.

Key points

  • Review contracts before building
  • Generate mocks, clients and docs
  • Lint and diff specs in CI

Further reading: OpenAPI Specification

Practice questions

What are the benefits of contract-first API design?

Answer

Early feedback from consumers, parallel frontend/backend work with mocks, consistent style via linting, and automated breaking-change detection.

How can CI detect breaking API changes?

Answer

Compare the new OpenAPI spec with the published one using a diff tool (e.g., oasdiff) and fail on removals, new required fields or type changes.

Open in the app to mark lessons complete, take notes and track your progress.

Was this page helpful?