tictactoe

JSON

{ "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" } } } } } } } 

YAML

openapi: 3.1.0 info: title: Tic Tac Toe description: | This API allows writing down marks on a Tic Tac Toe board and requesting the state of the board or of individual squares. version: 1.0.0 tags: - name: Gameplay paths: # Whole board operations /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 # Single square operations /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: # Only reading the board allow with delegated access 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: # Reads and writes permitted via authorization code flow board:read: Read the board board:write: Write to the board