{ "openapi": "3.1.0", "info": { "title": "Tic Tac Toe", "description": "This API allows writing down marks on a Tic Tac Toe board\nand requesting the state of the board or of individual squares.\n", "version": "1.0.0" }, "tags": [ { "name": "Gameplay" } ], "paths": { "/board": { "get": { "summary": "Get the whole board", "description": "Retrieves the current state of the board and the winner.", "tags": ["Gameplay"], "operationId": "get-board", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/status" } } } } }, "security": [ { "defaultApiKey": [] }, { "app2AppOauth": ["board:read"] } ] } }, "/board/{row}/{column}": { "parameters": [ { "$ref": "#/components/parameters/rowParam" }, { "$ref": "#/components/parameters/columnParam" } ], "get": { "summary": "Get a single board square", "description": "Retrieves the requested square.", "tags": ["Gameplay"], "operationId": "get-square", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/mark" } } } }, "400": { "description": "The provided parameters are incorrect", "content": { "text/html": { "schema": { "$ref": "#/components/schemas/errorMessage" }, "example": "Illegal coordinates" } } } }, "security": [ { "bearerHttpAuthentication": [] }, { "user2AppOauth": ["board:read"] } ] }, "put": { "summary": "Set a single board square", "description": "Places a mark on the board and retrieves the whole board and the winner (if any).", "tags": ["Gameplay"], "operationId": "put-square", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/mark" } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/status" } } } }, "400": { "description": "The provided parameters are incorrect", "content": { "text/html": { "schema": { "$ref": "#/components/schemas/errorMessage" }, "examples": { "illegalCoordinates": { "value": "Illegal coordinates." }, "notEmpty": { "value": "Square is not empty." }, "invalidMark": { "value": "Invalid Mark (X or O)." } } } } } }, "security": [ { "bearerHttpAuthentication": [] }, { "user2AppOauth": ["board:write"] } ] } } }, "components": { "parameters": { "rowParam": { "description": "Board row (vertical coordinate)", "name": "row", "in": "path", "required": true, "schema": { "$ref": "#/components/schemas/coordinate" } }, "columnParam": { "description": "Board column (horizontal coordinate)", "name": "column", "in": "path", "required": true, "schema": { "$ref": "#/components/schemas/coordinate" } } }, "schemas": { "errorMessage": { "type": "string", "maxLength": 256, "description": "A text message describing an error" }, "coordinate": { "type": "integer", "minimum": 1, "maximum": 3, "example": 1 }, "mark": { "type": "string", "enum": [".", "X", "O"], "description": "Possible values for a board square. `.` means empty square.", "example": "." }, "board": { "type": "array", "maxItems": 3, "minItems": 3, "items": { "type": "array", "maxItems": 3, "minItems": 3, "items": { "$ref": "#/components/schemas/mark" } } }, "winner": { "type": "string", "enum": [".", "X", "O"], "description": "Winner of the game. `.` means nobody has won yet.", "example": "." }, "status": { "type": "object", "properties": { "winner": { "$ref": "#/components/schemas/winner" }, "board": { "$ref": "#/components/schemas/board" } } } }, "securitySchemes": { "defaultApiKey": { "description": "API key provided in console", "type": "apiKey", "name": "api-key", "in": "header" }, "basicHttpAuthentication": { "description": "Basic HTTP Authentication", "type": "http", "scheme": "Basic" }, "bearerHttpAuthentication": { "description": "Bearer token using a JWT", "type": "http", "scheme": "Bearer", "bearerFormat": "JWT" }, "app2AppOauth": { "type": "oauth2", "flows": { "clientCredentials": { "tokenUrl": "https://learn.openapis.org/oauth/2.0/token", "scopes": { "board:read": "Read the board" } } } }, "user2AppOauth": { "type": "oauth2", "flows": { "authorizationCode": { "authorizationUrl": "https://learn.openapis.org/oauth/2.0/auth", "tokenUrl": "https://learn.openapis.org/oauth/2.0/token", "scopes": { "board:read": "Read the board", "board:write": "Write to the board" } } } } } } }