Swagger Throws "Could Not Resolve Reference"

As a part of my learning journey (with TestDriven.io) I'm learning about Swagger or OpenApi. I'm getting this error from Swagger: Could not resolve reference: Could not resolve pointer: /components/schemas/user does not exist in document that reference is clearly in the json file so why is it complaining ? (this text here is to pass site's minimum character limit in the post and has no relevance to the question itself)

{
  "openapi": "3.0.2",
  "info": {
    "version": "0.0.1",
    "title": "Users Service",
    "description": "Swagger spec for documenting the users service"
  },
  "servers": [
    {
      "url": ""
    }
  ],
  "paths": {
    "/users/ping": {
      "get": {
        "summary": "Just a sanity check",
        "responses": {
          "200": {
            "description": "Will return 'pong!'"
          }
        }
      }
    },
    "/users": {
      "get": {
        "summary": "Returns all users",
        "responses": {
          "200": {
            "description": "user object"
          }
        }
      }
    },
    "/users/{id}": {
      "get": {
        "summary": "Returns a user based on a single user ID",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of user to fetch",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "user object"
          }
        }
      }
    },
    "/auth/register": {
      "post": {
        "summary": "Creates a new user",
        "requestBody": {
          "description": "User to add",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/user-full"
              }
            }
          }
        }
      },

      "responses": {
        "200": {
          "description": "user object"
        }
      }
    },

    "/auth/login": {
      "post": {
        "summary": "Logs a user in",
        "requestBody": {
          "description": "User to log in",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/user"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successfully logged in"
          }
        }
      }
    },
    "/auth/status": {
      "get": {
        "summary": "Returns the logged in user's status",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "user object"
          }
        }
      }
    },
    "/auth/logout": {
      "get": {
        "summary": "Logs a user out",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully logged out"
          }
        }
      }
    },
    "components": {
      "securitySchemes": {
        "bearerAuth": {
          "type": "http",
          "scheme": "bearer"
        }
      },

      "schemas": {
        "user": {
          "properties": {
            "email": {
              "type": "string"
            },
            "password": {
              "type": "string"
            }
          }
        },
        "user-full": {
          "properties": {
            "username": {
              "type": "string"
            },
            "email": {
              "type": "string"
            },
            "password": {
              "type": "string"
            }
          }
        }
      }
    }
  }
}

1 Answer

The components section needs to be on the top level of the JSON file like this:

{
  "openapi": "3.0.2",
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    },
    ...
  },
  ...
}

The error was that components were inside paths rather than on the top level.

1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Alexander Ross

Alexander Ross

Gaming, Esports & Interactive Media Writer

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.

Share this article
Twitter Facebook Pinterest