Last active
January 26, 2021 16:00
-
-
Save pgrimaud/bd7b1cd12a685885ea08a0caeca7e88a to your computer and use it in GitHub Desktop.
Mini API
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
# Lancer le projet rapidement : php -S 127.0.0.1:8000 | |
# Features | |
# - Login via API | |
# - Requête HTTP de type POST | |
# - /login | |
# - récupérer la liste des comptes via API | |
# - Requête HTTP de type GET | |
# - soumettre une transaction via API | |
# - Requête HTTP de type POST | |
# Par manque de temps, ces données sont écrites en dur pour s'abstraire de la couche de persistance (sql par exemple) | |
const USER = 'pierre'; | |
const PASSWORD = 'password1234'; | |
const ACCOUNTS = [ | |
'PEL' => 15000, | |
'LDD' => 11000, | |
'ASSU_VIE' => 35000 | |
]; | |
header('Content-Type: application/json'); | |
$path = $_SERVER['PATH_INFO'] ?? '/'; | |
# $path = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/' | |
switch ($path) { | |
case '/login': | |
// on vérifie que la méthode HTTP est bien POST | |
if ($_SERVER['REQUEST_METHOD'] === 'POST') { | |
// on vérifie les identifiants | |
$user = $_POST['user'] ?? null; | |
$password = $_POST['password'] ?? null; | |
// si les informations soumises sont bonnes | |
if ($user === USER && $password === PASSWORD) { | |
// je suis connecté et je génère un token | |
$token = md5(USER . PASSWORD); | |
echo json_encode([ | |
'result' => [ | |
'token' => $token | |
], | |
'code' => 200 | |
]); | |
} else { | |
// erreur de login ou de password | |
header("HTTP/1.0 401 Unauthorized"); | |
echo json_encode([ | |
'result' => 'Error 401 : wrong login or password', | |
'code' => 401 | |
]); | |
} | |
} else { | |
// les autres méthodes ne sont pas autorisées | |
header("HTTP/1.0 405 Method not allowed"); | |
echo json_encode([ | |
'result' => 'Error 405 : method ' . $_SERVER['REQUEST_METHOD'] . ' not allowed', | |
'code' => 405 | |
]); | |
} | |
break; | |
case '/accounts': | |
// on vérifie que la méthode HTTP est bien GET | |
if ($_SERVER['REQUEST_METHOD'] === 'GET') { | |
// on vérifie que le token passé en paramètre est bon | |
$apiKey = $_GET['token'] ?? null; | |
$token = md5(USER . PASSWORD); | |
// si l'apikey soumise en paramètres GET est la même que le token, on est identifié | |
if ($apiKey === $token) { | |
// on affiche la liste des comptes | |
echo json_encode([ | |
'result' => [ | |
'accounts' => ACCOUNTS | |
], | |
'code' => 200 | |
]); | |
} else { | |
// erreur d'api key | |
header("HTTP/1.0 401 Unauthorized"); | |
echo json_encode([ | |
'result' => 'Error 401 : wrong or missing api key', | |
'code' => 401 | |
]); | |
} | |
} else { | |
// les autres méthodes ne sont pas autorisées | |
header("HTTP/1.0 405 Method not allowed"); | |
echo json_encode([ | |
'result' => 'Error 405 : method ' . $_SERVER['REQUEST_METHOD'] . ' not allowed', | |
'code' => 405 | |
]); | |
} | |
break; | |
case '/transactions': | |
// on vérifie que la méthode HTTP est bien POST | |
if ($_SERVER['REQUEST_METHOD'] === 'POST') { | |
// on vérifie que le token passé en paramètre est bon | |
$apiKey = $_GET['token'] ?? null; | |
$token = md5(USER . PASSWORD); | |
// si l'apikey soumise en paramètres GET est la même que le token, on est identifié | |
if ($apiKey === $token) { | |
// on vérifie les informations soumises | |
$amount = $_POST['amount'] ?? 0; | |
$account = $_POST['account'] ?? null; | |
// if (isset(ACCOUNTS[$account])) | |
if (array_key_exists($account, ACCOUNTS)) { | |
// le compte existe, je peux affiche le nouveau solde | |
echo json_encode([ | |
'result' => [ | |
$account => ACCOUNTS[$account] + $amount, | |
], | |
'code' => 200 | |
]); | |
} else { | |
// le compte n'existe pas | |
header("HTTP/1.0 404 Not Found"); | |
echo json_encode([ | |
'result' => 'Error 404 : ' . $account . ' account not found', | |
'code' => 404 | |
]); | |
} | |
} else { | |
// erreur d'api key | |
header("HTTP/1.0 401 Unauthorized"); | |
echo json_encode([ | |
'result' => 'Error 401 : wrong or missing api key', | |
'code' => 401 | |
]); | |
} | |
} else { | |
// les autres méthodes ne sont pas autorisées | |
header("HTTP/1.0 405 Method not allowed"); | |
echo json_encode([ | |
'result' => 'Error 405 : method ' . $_SERVER['REQUEST_METHOD'] . ' not allowed', | |
'code' => 405 | |
]); | |
} | |
break; | |
// la route n'est pas trouvée, donc c'est une erreur 404 | |
default: | |
header("HTTP/1.0 404 Not Found"); | |
echo json_encode([ | |
'result' => 'Error 404 : ' . $path . ' not found', | |
'code' => 404 | |
]); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment