Merge pull request #84 from ThomasRubini/api_doc
add API documentation yaml
This commit is contained in:
commit
2b6673d4a9
470
api_doc.yml
Normal file
470
api_doc.yml
Normal file
@ -0,0 +1,470 @@
|
||||
openapi: 3.0.0
|
||||
info:
|
||||
title: Truth Inquiry
|
||||
description: "Serious Game sur le theme de la communication non verbale"
|
||||
version: 1.0.0
|
||||
contact:
|
||||
email: contact@simailadjalim.fr
|
||||
license:
|
||||
name: MIT
|
||||
url: https://www.mit.edu/~amini/LICENSE.md
|
||||
|
||||
servers:
|
||||
- url: truthInquiry.simailadjalim.fr
|
||||
|
||||
# Definition des tags ------------------------
|
||||
tags:
|
||||
- name: "pages"
|
||||
description: "Pages endpoints"
|
||||
- name: "api"
|
||||
description: "Api endpoints"
|
||||
|
||||
# Endpoints
|
||||
paths:
|
||||
/:
|
||||
get:
|
||||
tags:
|
||||
- pages
|
||||
summary: "Main page"
|
||||
description: "Home page of the game, it serves as a hub of all other pages : legal mentions, credits and game pages"
|
||||
operationId: homePage
|
||||
responses:
|
||||
"200":
|
||||
description: "return the home page of the game"
|
||||
content:
|
||||
text/html: {}
|
||||
|
||||
/solo:
|
||||
get:
|
||||
tags:
|
||||
- pages
|
||||
summary: "solo game page"
|
||||
description: "Sigle player game page, it holds all of the game logic from the player entering their username to the end of the game"
|
||||
operationId: singlePage
|
||||
responses:
|
||||
"200":
|
||||
description: "returns the game page"
|
||||
content:
|
||||
text/html: {}
|
||||
|
||||
/multi:
|
||||
get:
|
||||
tags:
|
||||
- pages
|
||||
summary: "multiplayer game page"
|
||||
description: "Multi player game page, it holds all of the game logic from the game creator starting the game to its end"
|
||||
operationId: multiPage
|
||||
responses:
|
||||
"200":
|
||||
description: "returns the game page"
|
||||
content:
|
||||
text/html: {}
|
||||
|
||||
/legal:
|
||||
get:
|
||||
tags:
|
||||
- pages
|
||||
summary: "legal mention page"
|
||||
description: "The legal mention page, holds the legal mentions such as where is hosted the website and who made it"
|
||||
operationId: mentionLegales
|
||||
responses:
|
||||
"200":
|
||||
description: "returns the legal mention page"
|
||||
content:
|
||||
text/html: {}
|
||||
|
||||
/lobby/{game_id}:
|
||||
get:
|
||||
tags:
|
||||
- pages
|
||||
summary: "multiplayer lobby room"
|
||||
description: "The multiplayer lobby room is shown before a multiplayer game starts, is shows the current member of the game, it is reacheable by the game id shown in the page and in the url"
|
||||
parameters:
|
||||
- in: path
|
||||
name: game_id
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
description: gameId
|
||||
|
||||
|
||||
operationId: invite
|
||||
responses:
|
||||
"200":
|
||||
description: "return the lobby page."
|
||||
content:
|
||||
text/html: {}
|
||||
"404":
|
||||
description: "This does not exist or does not exist anymore"
|
||||
content:
|
||||
text/html: {}
|
||||
|
||||
# Api ------------------------
|
||||
|
||||
/api/v1/createGame:
|
||||
post:
|
||||
tags:
|
||||
- api
|
||||
summary: "Create a game session"
|
||||
description: "This endpoint create a game in the server, the username passed as parametter is set as the game owner"
|
||||
operationId: create_game
|
||||
requestBody:
|
||||
description: "username to set as game owner"
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
username:
|
||||
$ref: "#/components/schemas/username"
|
||||
|
||||
responses:
|
||||
"200":
|
||||
description: "Returns a object, with the error code, and a game_id."
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/newGameData"
|
||||
text/plain; charset=utf-8:
|
||||
schema:
|
||||
type: string
|
||||
|
||||
/api/v1/joinGame:
|
||||
post:
|
||||
tags:
|
||||
- api
|
||||
summary: "Adds user to an existing game"
|
||||
description: "This endpoint adds the username passed as parameter to the game identified by its game_id also passed as the parametter"
|
||||
operationId: join_game
|
||||
requestBody:
|
||||
description: "object with a game_id and a username"
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/joinGameData"
|
||||
|
||||
responses:
|
||||
"200":
|
||||
description: "returns a object with the error code."
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
$ref: "#/components/schemas/error"
|
||||
text/plain; charset=utf-8:
|
||||
schema:
|
||||
type: string
|
||||
|
||||
/api/v1/isOwner:
|
||||
post:
|
||||
tags:
|
||||
- api
|
||||
summary: "ask if the user is the game owner"
|
||||
description : "This endpoint it used to know if the username stored in the cookie is the owner of the game"
|
||||
operationId: is_owner
|
||||
parameters:
|
||||
- in: cookie
|
||||
name: session
|
||||
description: Local session, holds data used to authentificate the user and the games they belong.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
responses:
|
||||
"200":
|
||||
description: "returns an object with the error code."
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
$ref: "#/components/schemas/error"
|
||||
owner:
|
||||
type: boolean
|
||||
description: "boolean determining if the palyer is the owner of the gzame"
|
||||
|
||||
/api/v1/startGame:
|
||||
post:
|
||||
tags:
|
||||
- api
|
||||
summary: "Start the game"
|
||||
description: "Starts the game and generate necessary data"
|
||||
operationId: startGame
|
||||
parameters:
|
||||
- in: cookie
|
||||
name: session
|
||||
description: Local session, holds data used to authentificate the user and the games they belong.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
|
||||
responses:
|
||||
"200":
|
||||
description: "returns a object with the error code."
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
$ref: "#/components/schemas/error"
|
||||
|
||||
/api/v1/getGameData:
|
||||
post:
|
||||
tags:
|
||||
- api
|
||||
summary: "get game data"
|
||||
description: "Guess the game from the cookie and returns general game data necessary to the client to work properly"
|
||||
operationId: getGame
|
||||
parameters:
|
||||
- in: cookie
|
||||
name: session
|
||||
description: Local session, holds data used to authentificate the user and the games they belong.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
responses:
|
||||
"200":
|
||||
description: "returns a object with the error code."
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/gameData"
|
||||
|
||||
/api/v1/getGameMembers:
|
||||
post:
|
||||
tags:
|
||||
- api
|
||||
summary: "Get game members"
|
||||
description: "Guess the game from the cookie and returns the members of that game"
|
||||
operationId: getMembers
|
||||
parameters:
|
||||
- in: cookie
|
||||
name: session
|
||||
description: Local session, holds data used to authentificate the user and the games they belong.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
responses:
|
||||
"200":
|
||||
description: "List of members in the game"
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
"error":
|
||||
$ref: "#/components/schemas/error"
|
||||
"members":
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
|
||||
/api/v1/hasJoined:
|
||||
post:
|
||||
tags:
|
||||
- api
|
||||
summary: "Check if the player is in a given game"
|
||||
description: "Checks the cookie to see if the client is currently in a given game"
|
||||
operationId: has_joined
|
||||
parameters:
|
||||
- in: cookie
|
||||
name: session
|
||||
description: Local session, holds data used to authentificate the user and the games they belong.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
responses:
|
||||
"200":
|
||||
description: "Returns error code and a boolean determining if the player is in the game"
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
"error":
|
||||
$ref: "#/components/schemas/error"
|
||||
"joined":
|
||||
type: boolean
|
||||
|
||||
/api/v1/getNpcImage:
|
||||
post:
|
||||
tags:
|
||||
- "api"
|
||||
summary: Get an image from its ID
|
||||
description: >
|
||||
This endpoint is used to show NPC images in the result page. The image id is provided by the server upon
|
||||
finishing the game. a static ID is needed because the server delete information related to the game after finishing it
|
||||
operationId: get_npc_image
|
||||
requestBody:
|
||||
description: "image_id we want the image of"
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
image_id:
|
||||
type: integer
|
||||
responses:
|
||||
"200":
|
||||
description: "image"
|
||||
content:
|
||||
image/png:
|
||||
schema:
|
||||
type: string
|
||||
|
||||
/api/v1/getNpcReaction:
|
||||
post:
|
||||
tags:
|
||||
- api
|
||||
summary: "Get an image corresponding to the reaction of a NPC in this game"
|
||||
description: "This endpoint is used during the game to get a random image corresponding to the assigned reaction of a NPC. The image may change every request"
|
||||
operationId: get_npc_reaction
|
||||
parameters:
|
||||
- in: cookie
|
||||
name: session
|
||||
description: Local session, holds data used to authentificate the user and the games they belong.
|
||||
required: true
|
||||
schema:
|
||||
type: object
|
||||
requestBody:
|
||||
description: "ID of the NPC we want to get the image of"
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
npcid:
|
||||
type: integer
|
||||
responses:
|
||||
"200":
|
||||
description: "image"
|
||||
content:
|
||||
image/png:
|
||||
schema:
|
||||
type: string
|
||||
#/api/v1/gameProgress
|
||||
#/api/v1/submitAnwers
|
||||
|
||||
|
||||
components: #----------------------------------
|
||||
schemas:
|
||||
error:
|
||||
type: integer
|
||||
description: "request error code"
|
||||
enum:
|
||||
- 0
|
||||
- 1
|
||||
|
||||
game_id:
|
||||
type: string
|
||||
description: "ID of the game"
|
||||
|
||||
username:
|
||||
type: string
|
||||
description: "player username"
|
||||
|
||||
npc:
|
||||
type: object
|
||||
description: "npc to interogate in the game"
|
||||
properties:
|
||||
"QA_0" :
|
||||
type: string
|
||||
description: "'Where?' type answer"
|
||||
"QA_1" :
|
||||
type: string
|
||||
description: "'With who?' type answer"
|
||||
name:
|
||||
type: string
|
||||
description: "npc name"
|
||||
|
||||
salle:
|
||||
type: object
|
||||
description: "object representing a single room the the game story"
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
description: virtual room name
|
||||
npcs:
|
||||
type: array
|
||||
description: array of the npc_id present in the room, should always be at the number of two, execept for the bulgar who was alone in the room
|
||||
items:
|
||||
type: string
|
||||
#____________________________#
|
||||
|
||||
game:
|
||||
type: object
|
||||
description: "Main game data, should be queried once"
|
||||
properties:
|
||||
npcs:
|
||||
type: object
|
||||
description: "List of the randomly chosen npc, with their answer for each type of questions"
|
||||
properties:
|
||||
"npc_id_0":
|
||||
$ref: "#/components/schemas/npc"
|
||||
"npc_id_1":
|
||||
$ref: "#/components/schemas/npc"
|
||||
"npc_id_2":
|
||||
$ref: "#/components/schemas/npc"
|
||||
"npc_id_3":
|
||||
$ref: "#/components/schemas/npc"
|
||||
"npc_id_4":
|
||||
$ref: "#/components/schemas/npc"
|
||||
questions:
|
||||
type: object
|
||||
description: "Question identified by their type, randomly chosen by the server"
|
||||
properties:
|
||||
"QA_0":
|
||||
type: string
|
||||
description: "'Where?' type question"
|
||||
"QA_1":
|
||||
type: string
|
||||
description: "'With who?' type question"
|
||||
rooms:
|
||||
type: object
|
||||
description: "object storing the virtual rooms that holds the npcs"
|
||||
properties:
|
||||
"room_id_0":
|
||||
$ref: "#/components/schemas/salle"
|
||||
"room_id_1":
|
||||
$ref: "#/components/schemas/salle"
|
||||
"room_id_2":
|
||||
$ref: "#/components/schemas/salle"
|
||||
traits:
|
||||
type : array
|
||||
description: "List of available traits on in this game session"
|
||||
items:
|
||||
type: string
|
||||
|
||||
newGameData:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
$ref: "#/components/schemas/error"
|
||||
game_id:
|
||||
$ref: "#/components/schemas/game_id"
|
||||
|
||||
|
||||
joinGameData:
|
||||
type: object
|
||||
properties:
|
||||
game_id:
|
||||
$ref: "#/components/schemas/game_id"
|
||||
username:
|
||||
$ref: "#/components/schemas/username"
|
||||
|
||||
gameData:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
$ref: "#/components/schemas/error"
|
||||
gameData:
|
||||
$ref: "#/components/schemas/game"
|
||||
|
||||
|
@ -9,6 +9,8 @@ from truthinquiry.logic import game_logic
|
||||
|
||||
routes_api = flask.Blueprint("api", __name__)
|
||||
|
||||
# API specification is documented in api_doc.yml
|
||||
|
||||
@routes_api.route("/createGame", methods=["GET", "POST"])
|
||||
def create_game():
|
||||
username = flask.request.values.get("username")
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user