Skip to content
Snippets Groups Projects

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