Chaque API REST doit être accompagnée d'une documentation. Que l'API soit publique ou privée. Ceci est donc la documentation qui s'adjoint au projet PHP & API.
En-tête des requêtes HTTP
Content-Typeapplication/json; charset=UTF-8
Méthodes des requêtes HTTP
GETPOSTPUTDELETE
Corps des requêtes HTTP
- Format
json
Codes de Statut des réponses HTTP
200OK201Created204No Content400Bad Request404Not Found422Unprocessable Content500Internal Server Error
Types
stringchaine de caractères libresintentier positifdateau formatAAAA-MM-JJurlchaine de caractères respectant le formatRFC 2396
Encodage
UTF-8- Conversion
HtmlEntitiespour certains caractères. Par exemple :<>, etc.
/api/compositors
*️⃣ Trier
sort — Trier par <nom_du_champ>. Valeur : string obligatoire.
/api/compositors?sort=lastname
desc — Trier par ordre décroissant. Valeur : aucune. Par défaut : trié par date de naissance.
/api/compositors?desc
/api/compositors?desc&sort=firstname
*️⃣ Filtrer
born_before — Filter antérieurement à la date de naissance. Valeur : string obligatoire au format AAAA-MM-JJ.
/api/compositors?born_before=1750-01-01
born_after — Filter postérieurement à la date de naissance. Valeur : string obligatoire au format AAAA-MM-JJ.
/api/compositors?born_after=1750-01-01
dead_before — Filter antérieurement à la date de décès. Valeur : string obligatoire au format AAAA-MM-JJ.
/api/compositors?dead_before=1750-01-01
dead_after — Filter postérieurement à la date de décès. Valeur : string obligatoire au format AAAA-MM-JJ.
/api/compositors?dead_after=1750-01-01
*️⃣ Rechercher
origin — Rechercher par origine. Valeur : string obligatoire.
/api/compositors?origin=allemagne
lastname — Rechercher par nom de famille. Valeur : string obligatoire.
/api/compositors?lastname=schumann
N/B : Habituellement, une API fournit un paramètre de recherche générique tel que search. Cette fonctionnalité n'est pas implémentée ici, mais peut faire l'objet d'un exercice libre. De même que la mise en place d'une recherche par date de naissance ou date de décès.
🟢 200 OK
{
"data": [
{
"lastname": "string",
"firstname": "string",
"birth": "1000-12-31",
"death": "1000-12-31",
"origin": "string",
"figure": "url",
"id": 0
},
// etc.
],
"total_items": 0
}{
"lastname": "string",
"firstname": "string",
"death": "1000-12-31",
"birth" : "1000-12-31",
"origin": "string",
"figure": "url",
"periods": [
0
]
}Required
lastnamefirstnamedeathbirthperiods
🟢 201 Created
{
"data": {
"id" : 0
}
}🟡 400 Bad Request En cas d'erreur de champs ou de données
{
"errors": {
"message": "Some fields don't match requirements and can't be processed",
// Soit :
"fields": {
"<nom_du_champ>": {
// Possibilités
"missing" : "Must be provided",
"too_short" : "Must contain <x> characters minimum",
"too_long" : "Must contain <y> characters maximum",
"format" : "Must respect format <W>",
"type" : "Must be an interger",
"range": "Must fit between <x> and <y>"
},
},
// Soit :
"all" : "No field matches as expected"
}
}En cas d'absence ou de non concordance avec la ou les période(s)
{
"errors": {
"message": "Some fields don't match requirements and can't be processed",
"fields": {
"periods": "No period exists for <x> [, ...]"
}
}
}🔴 500 Internal Server Error
{
"errors": {
"message" : "No compositor saved due to an unexpected internal error"
}
}id — Identifiant du compositeur. Valeur int prositive obligatoire.
🟢 200 OK
{
"data": {
"lastname": "string",
"firstname": "string",
"birth": "1000-12-31",
"death": "1000-12-31",
"origin": "string",
"figure": "url",
"periods": [
0
],
"id": 0
}
}🟠 404 Not Found
{
"errors": {
"message": "No compositor found for identifier <x>"
}
}id — Identifiant du compositeur. Valeur int prositive obligatoire.
{
"lastname": "string",
"firstname": "string",
"death": "1000-12-31",
"birth" : "1000-12-31",
"origin": "string",
"figure": "url",
}🟢 200 OK
{
"data": {
"lastname": "string",
"firstname": "string",
"birth": "1000-12-31",
"death": "1000-12-31",
"origin": "string",
"figure": "url",
"periods": [
0
],
"id": 0
}
}🟡 400 Bad Request
{
"errors": {
"message": "Some fields don't match requirements and can't be processed",
"fields": {
"<nom_du_champ>": {
// Possibilités
"format" : "Must respect format <Z>",
"too_short" : "Must contain <x> characters minimum",
"too_long" : "Must contain <y> characters maximum",
"type" : "Must be an interger"
},
}
}
}🟠 404 Not Found
{
"errors": {
"message": "No compositor found for identifier <x>"
}
}🔴 500 Internal Server Error
{
"errors": {
"message" : "No compositor updated due to an unexpected internal error"
}
}id — Identifiant du compositeur. Valeur int prositive obligatoire.
🟢 204 No Content Aucun contenu n'est retourné.
🟠 404 Not Found
{
"errors": {
"message": "No compositor found for identifier <x>"
}
}🔴 500 Internal Server Error
{
"errors": {
"message" : "No compositor deleted due to an unexpected internal error"
}
}/api/periods
🟢 200 OK
{
"data": [
{
"name": "string",
"begin": 0,
"end": 0,
"tag": "string",
"id": 0
},
// etc.
],
"total_items": 0
}id — Identifiant de la période. Valeur int positive obligatoire.
/api/periods/5
🟢 200 OK
{
"data": {
"name": "string",
"begin": 0,
"end": 0,
"tag": "string",
"description": "string",
"id": 0
}
}🟠 404 Not Found
{
"errors": {
"message": "No period found for identifier <x>"
}
}id — Identifiant de la période. Valeur int positive obligatoire.
/api/periods/5
{
"name": "string",
"begin": 0,
"end": 0,
"tag": "string",
}🟢 200 OK
{
"data": {
"lastname": "string",
"firstname": "string",
"birth": "1000-12-31",
"death": "1000-12-31",
"origin": "string",
"figure": "url",
"periods": [
0
],
"id": 0
}
}🟡 400 Bad Request
{
"errors": {
"message": "Some fields don't match requirements and can't be processed",
"fields": {
"<nom_du_champ>": {
// Possibilités
"too_short" : "Must contain <x> characters minimum",
"too_long" : "Must contain <y> characters maximum",
"type" : "Must be an interger",
"range": "Must fit between <x> and <y>"
},
}
}
}🟠 404 Not Found
{
"errors": {
"message": "No period found for identifier <x>"
}
}🔴 500 Internal Server Error
{
"errors": {
"message" : "No period updated due to an unexpected internal error"
}
}id — Identifiant de la période. Valeur int positive obligatoire.
/api/periods/5/compositors
🟢 200 OK
{
"data": {
"name": "string",
"begin": 0,
"end": 0,
"tag": "string",
"description": "string",
"id": 0,
"compositors": [
{
"lastname": "string",
"firstname": "string",
"birth": "1000-12-31",
"death": "1000-12-31",
"id": 0
},
// etc.
]
}
}