-
antoine gaienier authoredantoine gaienier authored
- SAÉ S4.A02. : Web Backend
- Objectif:
- Base de données
- API Ingredients
- GET /ingredients
- GET /ingredients/{id}
- GET /ingredients/{id}/name
- POST /ingredients
- DELETE /ingredients/{id}
- PUT /ingredients
- PATCH /ingredients/{id}
- API Pizzas
- GET /pizzas
- GET /pizzas/{nom}
- GET /pizzas/{nom}/prixfinal
- POST /pizzas
- DELETE /pizzas/{nom}
- DELETE /pizzas/{nom}/{id}
- PUT /pizzas/{nom}
- PATCH /pizzas/{nom}
- API Commandes
- GET /commandes
- GET /commandes/{id}
- GET /commandes/{id}/prixfinal
- POST /commandes
- DELETE /commandes/{id}
- DELETE /commandes/{id}/{nom}
- PUT /commandes/{id}
- PATCH /commandes/{id}
- Restrictions d'accès
- Bruno
SAÉ S4.A02. : Web Backend
- SAÉ S4.A02. : Web Backend
Objectif:
Savoir réaliser et mettre en place une architecture REST. Cette SAÉ ne met en oeuvre que les compétences REST.
Base de données
La base de données est une base de données relationnelle. Elle est composée de 5 tables:
-
ingredients
: contient tout les ingrédients qui commposent les pizzas (id, name, price) -
pizzas
: contient les pizzas (nom, pate, prixbase) -
pizzas_ingredients
: contient les ingrédients qui composent les pizzas (nom, id) nom est le nom de la pizza et id est l'id de l'ingrédient -
commandes
: contient les commandes (id, nom, date) -
commande_detail
: contient les pizzas commandées (id, nom) id est l'id de la commande et nom est le nom de la pizza commandée
API Ingredients
GET /ingredients
Renvoie la liste des ingrédients présents dans la base de données
[
{
"id": 1,
"name": "pomme de terre",
"price": 1
},
{
"id": 2,
"name": "crème",
"price": 2
}
]
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
GET /ingredients/{id}
Renvoie l'ingrédient correspondant à l'id passé en paramètre
{
"id": 1,
"name": "pomme de terre",
"price": 1
}
Status | Description |
---|---|
302 FOUND | La requête s'est effectuée correctement |
404 NOT FOUND | L'ingrédient n'existe pas |
GET /ingredients/{id}/name
Renvoie le nom de l'ingrédient correspondant à l'id passé en paramètre
{
"name": "pomme de terre"
}
Status | Description |
---|---|
302 FOUND | La requête s'est effectuée correctement |
404 NOT FOUND | L'ingrédient n'existe pas |
POST /ingredients
Ajoute un ingrédient à la base de données avec les informations passées en paramètre au format JSON.
Body:
{
"id": 1,
"name": "pomme de terre",
"price": 1
}
et renvoie l'ingrédient ajouté
{
"id": 1,
"name": "pomme de terre",
"price": 1
}
Status | Description |
---|---|
201 CREATED | La requête s'est effectuée correctement |
409 CONFLICT | L'ingrédient existe déjà |
500 INTERNAL SERVER ERROR | Erreur interne |
DELETE /ingredients/{id}
Supprime l'ingrédient correspondant à l'id passé en paramètre et ne renvoie rien
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
404 NOT FOUND | L'ingrédient n'existe pas |
PUT /ingredients
Modifie l'ingrédient avec les informations passées en paramètre au format JSON.
Body:
{
"id": 1,
"name": "truffe",
"price": 10
}
et renvoie l'ingrédient modifié
{
"id": 1,
"name": "truffe",
"price": 10
}
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
404 NOT FOUND | L'ingrédient n'existe pas |
PATCH /ingredients/{id}
Modifie l'ingrédient correspondant à l'id passé en paramètre avec les informations passées en paramètre au format JSON.
Body:
{
"price": 5.5
}
et renvoie l'ingrédient modifié
{
"id": 1,
"name": "pomme de terre",
"price": 5.5
}
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
404 NOT FOUND | L'ingrédient n'existe pas |
500 INTERNAL SERVER ERROR | Erreur interne |
API Pizzas
GET /pizzas
Renvoie la liste des pizzas présentes dans la base de données
[
{
"nom": "4 fromages",
"pate": "fine",
"prixbase": 10
},
{
"nom": "reine",
"pate": "fine",
"prixbase": 12
}
]
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
GET /pizzas/{nom}
Renvoie la pizza correspondant au nom passé en paramètre et les ingrédients qui la composent
{
"nom": "4 fromages",
"pate": "fine",
"prixbase": 10,
"ingredients": [
{
"id": 1,
"name": "pomme de terre",
"price": 1
},
{
"id": 2,
"name": "crème",
"price": 2
}
]
}
Status | Description |
---|---|
302 FOUND | La requête s'est effectuée correctement |
404 NOT FOUND | La pizza n'existe pas |
GET /pizzas/{nom}/prixfinal
Renvoie le prix final de la pizza correspondant au nom passé en paramètre
{
13
}
Status | Description |
---|---|
302 FOUND | La requête s'est effectuée correctement |
404 NOT FOUND | La pizza n'existe pas |
POST /pizzas
Ajoute une pizza à la base de données avec les informations passées en paramètre au format JSON
Body:
{
"nom": "4 fromages",
"pate": "fine",
"prixbase": 10
"ingredients": [
{
"id": 1,
},
{
"id": 2,
"name": "crème",
}
]
}
et renvoie la pizza ajoutée
{
"nom": "4 fromages",
"pate": "fine",
"prixbase": 10
"ingredients": [
{
"id": 1,
"name": "pomme de terre",
"price": 1
},
{
"id": 2,
"name": "crème",
"price": 2
}
]
}
Status | Description |
---|---|
201 CREATED | La requête s'est effectuée correctement |
409 CONFLICT | La pizza existe déjà |
500 INTERNAL SERVER ERROR | Erreur interne |
DELETE /pizzas/{nom}
Supprime la pizza correspondant au nom passé en paramètre et ne renvoie rien
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
404 NOT FOUND | La pizza n'existe pas |
DELETE /pizzas/{nom}/{id}
Supprime la relation entre la pizza correspondant au nom passé en paramètre et l'ingrédient correspondant à l'id passé en paramètre et ne renvoie rien
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
404 NOT FOUND | La pizza ou l'ingrédient n'existe pas |
PUT /pizzas/{nom}
Modifie la pizza correspondant au nom passé en paramètre avec les informations passées en paramètre au format JSON
Body:
{
"nom": "hawaienne",
"pate": "fine",
"prixbase": 10
"ingredients": [
{
"id": 1,
},
{
"id": 10,
"name": "ananas",
},
{
"id": 5,
"name":" sauce tomate"
}
]
}
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
404 NOT FOUND | La pizza n'existe pas |
500 INTERNAL SERVER ERROR | Erreur interne |
PATCH /pizzas/{nom}
Modifie la pizza correspondant au nom passé en paramètre avec les informations passées en paramètre au format JSON.
Body:
{
"prixbase": 15
}
qui modifie le prix de la pizza correspondant au nom passé en paramètre et renvoie la pizza modifiée et renvoie la pizza modifiée
{
"nom": "4 fromages",
"pate": "fine",
"prixbase": 15
"ingredients": [
{
"id": 1,
"name": "pomme de terre",
"price": 1
},
{
"id": 2,
"name": "crème",
"price": 2
}
]
}
ou
Body:
{
"ingredients": [
{
"id": 1,
},
{
"id": 10,
}
]
}
qui modifie les ingrédients de la pizza correspondant au nom passé en paramètre et renvoie la pizza modifiée
{
"nom": "4 fromages",
"pate": "fine",
"prixbase": 10
"ingredients": [
{
"id": 1,
"name": "pomme de terre",
"price": 1
},
{
"id": 10,
"name": "ananas",
"price": 3
}
]
}
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
404 NOT FOUND | La pizza n'existe pas |
500 INTERNAL SERVER ERROR | Erreur interne |
API Commandes
GET /commandes
Renvoie la liste des commandes présentes dans la base de données
[
{
"id": 1,
"nom": "commande1",
"date": "2021-03-01"
},
{
"id": 2,
"nom": "commande2",
"date": "2021-03-02"
}
]
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
GET /commandes/{id}
Renvoie la commande correspondant à l'id passé en paramètre et les pizzas commandées
{
"id": 1,
"nom": "commande1",
"date": "2024-03-01",
"pizzas": [
{
"nom": "4 fromages",
"pate": "fine",
"prixbase": 10
"ingredients": [
{
"id": 1,
"name": "pomme de terre",
"price": 1
},
{
"id": 2,
"name": "crème",
"price": 2
}
]
},
{
"nom": "reine",
"pate": "fine",
"prixbase": 12
"ingredients": [
{
"id": 1,
"name": "pomme de terre",
"price": 1
},
{
"id": 2,
"name": "crème",
"price": 2
}
]
}
]
}
Status | Description |
---|---|
302 FOUND | La requête s'est effectuée correctement |
404 NOT FOUND | La commande n'existe pas |
GET /commandes/{id}/prixfinal
Renvoie le prix final de la commande correspondant à l'id passé en paramètre
{
25
}
Status | Description |
---|---|
302 FOUND | La requête s'est effectuée correctement |
404 NOT FOUND | La commande n'existe pas |
POST /commandes
Ajoute une commande à la base de données avec les informations passées en paramètre au format JSON
Body:
{
"id": 1,
"nom": "commande1",
"date": "2024-03-01",
"pizzas": [
{
"nom": "4 fromages",
},
{
"nom": "reine",
}
]
}
et renvoie la commande ajoutée
{
"id": 1,
"nom": "commande1",
"date": "2024-03-01",
"pizzas": [
{
"nom": "4 fromages",
"pate": "fine",
"prixbase": 10
"ingredients": [
{
"id": 1,
"name": "pomme de terre",
"price": 1
},
{
"id": 2,
"name": "crème",
"price": 2
}
]
},
{
"nom": "reine",
"pate": "fine",
"prixbase": 12
"ingredients": [
{
"id": 1,
"name": "pomme de terre",
"price": 1
},
{
"id": 2,
"name": "crème",
"price": 2
}
]
}
]
}
Status | Description |
---|---|
201 CREATED | La requête s'est effectuée correctement |
409 CONFLICT | La commande existe déjà |
500 INTERNAL SERVER ERROR | Erreur interne |
DELETE /commandes/{id}
Supprime la commande correspondant à l'id passé en paramètre et ne renvoie rien
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
404 NOT FOUND | La commande n'existe pas |
DELETE /commandes/{id}/{nom}
Supprime la relation entre la commande correspondant à l'id passé en paramètre et la pizza correspondant au nom passé en paramètre et ne renvoie rien
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
404 NOT FOUND | La commande ou la pizza n'existe pas |
PUT /commandes/{id}
Modifie la commande correspondant à l'id passé en paramètre avec les informations passées en paramètre au format JSON
Body:
{
"id": 1,
"nom": "commande1",
"date": "2024-03-01",
"pizzas": [
{
"nom": "4 fromages",
},
{
"nom": "reine",
}
]
}
et renvoie la commande modifiée
{
"id": 1,
"nom": "commande1",
"date": "2024-03-01",
"pizzas": [
{
"nom": "4 fromages",
"pate": "fine",
"prixbase": 10
"ingredients": [
{
"id": 1,
"name": "pomme de terre",
"price": 1
},
{
"id": 2,
"name": "crème",
"price": 2
}
]
},
{
"nom": "reine",
"pate": "fine",
"prixbase": 12
"ingredients": [
{
"id": 1,
"name": "pomme de terre",
"price": 1
},
{
"id": 2,
"name": "crème",
"price": 2
}
]
}
]
}
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
404 NOT FOUND | La commande n'existe pas |
500 INTERNAL SERVER ERROR | Erreur interne |
PATCH /commandes/{id}
Modifie la commande correspondant à l'id passé en paramètre avec les informations passées en paramètre au format JSON
Body:
{
"date": "2024-03-02"
"pizzas": [
{
"nom": "4 fromages",
}
]
}
et renvoie la commande modifiée
{
"id": 1,
"nom": "commande1",
"date": "2024-03-02",
"pizzas": [
{
"nom": "4 fromages",
"pate": "fine",
"prixbase": 10
"ingredients": [
{
"id": 1,
"name": "pomme de terre",
"price": 1
},
{
"id": 2,
"name": "crème",
"price": 2
}
]
}
]
}
Status | Description |
---|---|
200 OK | La requête s'est effectuée correctement |
404 NOT FOUND | La commande n'existe pas |
500 INTERNAL SERVER ERROR | Erreur interne |
Restrictions d'accès
La partie restriction d'accès n'est pas implémentée par manque de temps.
Bruno
Bruno est organisé de façon à pouvoir lancer le runnner de l'application sans avoir d'erreur.
- Ingredients
- ingredientsFail
- Pizzas
- PizzasFail
- Commandes
- CommandesFail