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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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:
1 2 3 4 5 |
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.