Fehlerbehandlung – HTTP-Status-Codes
Die Fehlerbehandlung läuft bei einer API für gewöhnlich über die entsprechenden Status-Codes. Wir könnten unseren UserController also folgendermaßen erweitern.
public function indexAction()
{
try {
$input = json_decode(file_get_contents('php://input'), true);
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
$result = $this->get((int)$_GET['id']);
} elseif ($_SERVER['REQUEST_METHOD'] == 'DELETE') {
$result = $this->delete((int)$_GET['id']);
} elseif ($_SERVER['REQUEST_METHOD'] == 'POST') {
$result = $this->create($input);
} elseif ($_SERVER['REQUEST_METHOD'] == 'PUT') {
$result = $this->update($input);
}
header('HTTP/1.0 200 OK');
} catch (ApiException $e) {
if ($e->getCode() == ApiException::MALFORMED_INPUT) {
header('HTTP/1.0 409 Bad Request');
}
$result = ['message' => $e->getMessage()];
}
header('Content-Type: application/json');
echo json_encode($result);
}
Wir verwenden eine eigene Exception für die API, die Fehlercodes für uns als Konstanten beinhaltet:
class ApiException extends \Exception
{
const AUTHENTICATION_FAILED = 1;
const MALFORMED_INPUT = 2;
}
Damit können die einzelnen Endpunkte sich auf den Fehlercode beschränken und unser „Error-Handler“ kümmert sich um die korrekte Kommunikation mit dem Client.