Dovrebbe essere generato un errore 500 solo dal server web, o è accettabile che il tuo programma lanci uno solo?
try {
some bad code;
}
catch (Exception) {
set_header_code(500);
set_content_type('application/json');
set_response_body(json_encode({'is_error': true, 'message': 'An unknown error occurred', 'request_id': $random_number}));
}
Si tratta di un anti-pattern?
Modifica
In risposta ai commenti di Robert Harvey:
500 Internal Server Error -- The server encountered an unexpected condition which prevented it from fulfilling the request.
Wikipedia -- A generic error message, given when no more specific message is suitable. The general catch-all error when the server-side throws an exception.
Potrei usare questo modello per convalidare un modulo:
if ($email_address === null || !is_valid_email($email_address)) {
throw new Exception('You must supply a valid email address');
}
Il server ha riscontrato una condizione imprevista che impedisce a di soddisfare la richiesta , ovvero che il campo email è mancante o non valido.
Il codice può quindi rilevare questo errore in seguito, convertendolo in una bella pagina di errore 500 con alcuni dati JSON che duplicano l'errore.
Perché dovresti avere sia l'errore 500 che {is_error: true}
? Che ne dici se generi un errore 500 e dici {is_error: false}
? Cosa significa? Perché non lasciarlo come 200 OK
con {is_error: true}
?
In JavaScript:
if (http_response_code == 500) {
// The server did not respond as expected
// Do not try to parse the response body as JSON
// because there's no guarantee it contains JSON data
// Display default error message
}
else if (http_response_code == 200) {
response = parse_response_as_json();
if (response.is_error) {
display_error_message(response.message);
}
else {
// process response
}
}