Skip to content

Reusability with $ref — Referencing Schemas Across Files

DodaTech Updated 2026-06-28 2 min read

In this tutorial, you will learn about Reusability with $ref. We cover key concepts, practical examples, and best practices to help you master this topic.

The $ref keyword in OpenAPI enables reusability by referencing definitions within the same document or across multiple files, reducing duplication and ensuring consistency.

In this tutorial, you will learn how to use $ref effectively, organize multi-file specs, and follow best practices for referencing components.

What You'll Learn

You will learn JSON Reference syntax, internal and external $ref, multi-file organization strategies, and common pitfalls.

flowchart LR
  A[openapi.yaml] --> B[paths/users.yaml]
  A --> C[schemas/user.yaml]
  A --> D[parameters/common.yaml]
  B --> C
  B:::current
  classDef current fill:#f90,color:#fff,stroke:#333,stroke-width:2px

Internal $ref

Reference within the same file:

paths:
  /users:
    get:
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserList"
components:
  schemas:
    UserList:
      type: array
      items:
        $ref: "#/components/schemas/User"
    User:
      type: object
      properties:
        id:
          type: integer

External $ref

Reference across files:

# Main spec: openapi.yaml
paths:
  /users:
    $ref: "./paths/users.yaml"

components:
  schemas:
    User:
      $ref: "./schemas/user.yaml"
    Error:
      $ref: "./schemas/common/error.yaml"
# paths/users.yaml
get:
  operationId: listUsers
  summary: List all users
  parameters:
    - $ref: "../parameters/pagination.yaml#/page"
    - $ref: "../parameters/pagination.yaml#/limit"
  responses:
    "200":
      description: User list
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: "../schemas/user.yaml"

Multi-File Organization

api/
  openapi.yaml          # Root spec
  info.yaml             # Info object
  servers.yaml          # Servers object
  paths/
    users.yaml          # User endpoints
    documents.yaml      # Document endpoints
  schemas/
    user.yaml           # User schema
    document.yaml       # Document schema
    common/
      error.yaml        # Error schema
      pagination.yaml   # Pagination schema
  parameters/
    common.yaml         # Shared parameters
  responses/
    common.yaml         # Shared responses

Common Mistakes

  1. Relative path errors — $ref paths are relative to the file containing the reference, not the root spec.
  2. Circular references — Schema A references Schema B which references Schema A. Most tools handle this but it causes issues.
  3. Over-splitting — Splitting every schema into its own file. Group related schemas.
  4. No base spec — All files reference each other without a root. Always have a root openapi.yaml.
  5. Mixing internal and external $ref — Use external $ref for separate files, internal for within the same file.

Practice Questions

  1. What is the syntax for an internal $ref?
  2. How do external $ref paths work?
  3. How do you organize a multi-file spec?
  4. What are the risks of circular $ref?
  5. How do you avoid over-splitting?

Challenge

Convert a single-file OpenAPI spec into a well-organized multi-file structure with separate directories for paths, schemas, parameters, and responses. Validate that all external $ref paths resolve correctly.

What's Next

In the next lesson, you will learn about security schemes in OpenAPI.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro