Skip to content

The Components Object — Reusable Definitions in OpenAPI

DodaTech Updated 2026-06-28 2 min read

In this tutorial, you will learn about The Components Object. We cover key concepts, practical examples, and best practices to help you master this topic.

The components object in OpenAPI holds reusable definitions for schemas, parameters, responses, request bodies, headers, security schemes, examples, links, and callbacks that can be referenced from anywhere in the spec.

In this tutorial, you will learn every section of the components object and how to organize reusable definitions for maximum maintainability.

What You'll Learn

You will learn each section of the components object, how to define reusable components, how to reference them with $ref, and best practices for organizing component libraries.

graph TD
  A[components] --> B[schemas]
  A --> C[responses]
  A --> D[parameters]
  A --> E[requestBodies]
  A --> F[headers]
  A --> G[securitySchemes]
  A --> H[examples]
  A --> I[links]
  A --> J[callbacks]
  B:::current
  classDef current fill:#f90,color:#fff,stroke:#333,stroke-width:2px

Components Sections

components:
  schemas:
    User:
      type: object
      properties:
        id:
          type: integer
  responses:
    NotFound:
      description: Resource not found
  parameters:
    pageParam:
      name: page
      in: query
      schema:
        type: integer
  requestBodies:
    CreateUser:
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/CreateUser"
  headers:
    X-RateLimit-Remaining:
      schema:
        type: integer
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
  examples:
    UserExample:
      summary: Sample user
      value:
        id: 1
        name: "Alice"
  links:
    GetUser:
      operationId: getUser
      parameters:
        userId: "$response.body#/id"
  callbacks:
    userCreated:
      $ref: "#/components/callbacks/UserCreatedCallback"

Schema Organization

Organize schemas by domain and purpose:

components:
  schemas:
    # Request schemas
    CreateUserRequest:
      type: object
    UpdateUserRequest:
      type: object
    # Response schemas
    UserResponse:
      type: object
    UserListResponse:
      type: object
    # Common schemas
    Error:
      type: object
    Pagination:
      type: object
    # Domain schemas
    Address:
      type: object
    PhoneNumber:
      type: object

Reusability Patterns

Create a shared components library across specs using external $ref:

# Referencing external component file
components:
  schemas:
    User:
      $ref: "./common-schemas.yaml#/components/schemas/User"
    Error:
      $ref: "./common-schemas.yaml#/components/schemas/Error"

Common Mistakes

  1. Unreferenced components — Defining schemas never used. Don't bloat the spec.
  2. No Error schema — Every API needs a standard error schema.
  3. Inconsistent naming — Different naming conventions across components.
  4. Deep $ref chains — More than 2-3 levels of indirection is hard to follow.
  5. No Pagination schema — Every list endpoint needs pagination.

Practice Questions

  1. What sections are available in the components object?
  2. How do you reference a component?
  3. What is the purpose of examples in components?
  4. How do you organize schemas in components?
  5. How do you share components across multiple specs?

Challenge

Build a complete components library for a Microservices ecosystem. Include schemas for User, Error, Pagination, Address, AuditLog, common parameters (pagination, sorting), common responses (NotFound, Unauthorized, ValidationError), and security schemes (Bearer, API Key, OAuth2). Organize them for reuse across 10 API services.

What's Next

In the next lesson, you will learn how to use $ref for reusability across files.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro