{
  "openapi": "3.0.0",
  "servers": [
    {
      "url": "https://generated-bookstore.appspot.com/"
    }
  ],
  "info": {
    "description": "A simple Bookstore API example.",
    "title": "Bookstore",
    "version": "1.0.0"
  },
  "paths": {
    "/shelves": {
      "get": {
        "description": "Return all shelves in the bookstore.",
        "operationId": "listShelves",
        "responses": {
          "200": {
            "description": "List of shelves in the bookstore.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/listShelvesResponse"
                }
              }
            }
          }
        },
        "security": []
      },
      "post": {
        "description": "Create a new shelf in the bookstore.",
        "operationId": "createShelf",
        "responses": {
          "200": {
            "description": "A newly created shelf resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/shelf"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/shelf"
              }
            }
          },
          "description": "A shelf resource to create.",
          "required": true
        }
      },
      "delete": {
        "description": "Delete all shelves.",
        "operationId": "deleteShelves",
        "responses": {
          "default": {
            "description": "An empty response body."
          }
        }
      }
    },
    "/shelves/{shelf}": {
      "get": {
        "description": "Get a single shelf resource with the given ID.",
        "operationId": "getShelf",
        "parameters": [
          {
            "description": "ID of the shelf to get.",
            "in": "path",
            "name": "shelf",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A shelf resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/shelf"
                }
              }
            }
          },
          "default": {
            "description": "unexpected error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "description": "Delete a single shelf with the given ID.",
        "operationId": "deleteShelf",
        "parameters": [
          {
            "description": "ID of the shelf to delete.",
            "in": "path",
            "name": "shelf",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "An empty response body."
          }
        }
      }
    },
    "/shelves/{shelf}/books": {
      "get": {
        "description": "Return all books in a shelf with the given ID.",
        "operationId": "listBooks",
        "parameters": [
          {
            "description": "ID of the shelf whose books should be returned.",
            "in": "path",
            "name": "shelf",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of books on the specified shelf.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/listBooksResponse"
                }
              }
            }
          },
          "default": {
            "description": "unexpected error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error"
                }
              }
            }
          }
        }
      },
      "post": {
        "description": "Create a new book on the shelf.",
        "operationId": "createBook",
        "parameters": [
          {
            "description": "ID of the shelf where the book should be created.",
            "in": "path",
            "name": "shelf",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A newly created book resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/book"
                }
              }
            }
          },
          "default": {
            "description": "unexpected error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/book"
              }
            }
          },
          "description": "Book to create.",
          "required": true
        }
      }
    },
    "/shelves/{shelf}/books/{book}": {
      "get": {
        "description": "Get a single book with a given ID from a shelf.",
        "operationId": "getBook",
        "parameters": [
          {
            "description": "ID of the shelf from which to get the book.",
            "in": "path",
            "name": "shelf",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "ID of the book to get from the shelf.",
            "in": "path",
            "name": "book",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A book resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/book"
                }
              }
            }
          },
          "default": {
            "description": "unexpected error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "description": "Delete a single book with a given ID from a shelf.",
        "operationId": "deleteBook",
        "parameters": [
          {
            "description": "ID of the shelf from which to delete the book.",
            "in": "path",
            "name": "shelf",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "description": "ID of the book to delete from the shelf.",
            "in": "path",
            "name": "book",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "default": {
            "description": "An empty response body."
          }
        }
      }
    }
  },
  "security": [
    {
      "api_key": []
    }
  ],
  "components": {
    "schemas": {
      "book": {
        "properties": {
          "author": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "author",
          "title"
        ],
        "type": "object"
      },
      "listBooksResponse": {
        "properties": {
          "books": {
            "items": {
              "$ref": "#/components/schemas/book"
            },
            "type": "array"
          }
        },
        "required": [
          "books"
        ],
        "type": "object"
      },
      "listShelvesResponse": {
        "properties": {
          "shelves": {
            "items": {
              "$ref": "#/components/schemas/shelf"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "shelf": {
        "properties": {
          "name": {
            "type": "string"
          },
          "theme": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "theme"
        ],
        "type": "object"
      },
      "error": {
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32"
          },
          "message": {
            "type": "string"
          }
        },
        "type": "object"
      }
    },
    "securitySchemes": {
      "api_key": {
        "in": "query",
        "name": "key",
        "type": "apiKey"
      }
    }
  }
}
