Página 1 de 1

ERRORES DE USUARIO: THROW EXCEPTION VS HTTP_RESPONSE_CODE(500)

Publicado: 03 May 2017, 14:39
por GAH.1988
Estimados,
Buenas tardes, como están?
La idea del post es que me ayuden a definir un proceso de devolución de errores y poder manejarlos de manera agradable del lado del cliente.
Actualmente estoy desarrollando una app en la que desacople el front del back: por un lado tengo los html (sin código php en su interior) y casi por regla, cada html tiene un controller javascript que este es el que hace, por medio de ajax, la llamada a un .php con los parámetros que se necesita para el proceso.
Una vez terminado el proceso en el back, devuelvo un json y este lo tomo en el javascript y hago lo que se necesite:
if (this.readyState == 4 && this.status == 200) {
callbackSuccess(this.responseText);
}
Ahora bien, hay veces que desde el back quiero forzar un error/advertencia, por ejemplo, en el login, que la contraseña es incorrecta, actualmente esa regla la devuelvo normalmente con un json y en el front ingresa por el código antes mencionado (obviamente en el json que envío desde el back genero un objeto con un estado en particular distinto a las peticiones OK y el mensaje que deseo mostrarle al cliente), pero entre en una disyuntiva de si conceptualmente lo que estoy haciendo esta bien encarado (de mas esta decir que el desarrollo funciona y hace lo esperado), que quiero decir con esto, mi duda es si desde el back tanto las reglas de negocio que no pasaron con éxito (password incorrecto, clave caducada, etc) como una excepción lanzada (throw new ...) deben volver al cliente como readyState == 4 y this.status == 200 o esta bien provocar en el back un http_response_code(500) y devolver el json y en el cliente capturarlo como:
if (this.readyState == 4 && this.status == 500) {
callbackError(this.responseText);
}

Espero se entienda, la duda es mas que nada conceptual ya que la app funciona bien. en estos momentos le estoy dando mucha importancia a la arquitectura y a tener un desarrollo con una buena base.

Saludos.-

Re: ERRORES DE USUARIO: THROW EXCEPTION VS HTTP_RESPONSE_CODE(500)

Publicado: 03 May 2017, 14:52
por uruguayito
Y los datos de soporte son? :?:

Re: ERRORES DE USUARIO: THROW EXCEPTION VS HTTP_RESPONSE_CODE(500)

Publicado: 03 May 2017, 15:18
por GAH.1988
Que datos de soporte?
No es un error o un problema el que tengo, es una consulta conceptual.
Si desde el back de php devolver los errores con throw new exception y en el ajax llegaría como (readyState == 4 y status == 200) o desde el back esta bien hacer uso de la funcionalidad http_response_code(500) y que al front le llegue (readyState == 4 y status == 500).
Gracias.

Re: ERRORES DE USUARIO: THROW EXCEPTION VS HTTP_RESPONSE_CODE(500)

Publicado: 03 May 2017, 23:28
por AlfredoRamos
No me parece necesario, ni correcto lanzar un error HTTP 500, como sabes obtiene este código de estado cuando se produce un error interno en el servidor, tu ejemplo de validación de contraseñas no entra en esa categoria, porque no es un error del servidor (este ya procesó lo que pediste) sino en la ejecución del script.

A mi parecer en ambos casos (contraseña correcta e incorrecta) la petición debería regresar código de estado HTTP 200 y con un try/catch mostrar el JSON con el contenido o el mensaje de error según la validación.

Un ejemplo medio cutre:

Código: Seleccionar todo

header('Content-Type: application/json');

$json_data = [];

try {
	if ($db_password !== $input_password) {
		throw new ErrorException('Contraseña incorrecta');
	}
	
	$json_data = [
		'msg' => 'Contraseña correcta'
	];
} catch (ErrorException $ex) {
	$json_data = [
		'error'	=> $ex->getMessage()
	];
}

echo json_encode($json_data);
GAH.1988 escribió:Que datos de soporte?
No es un error o un problema el que tengo, es una consulta conceptual.
[...]
uruguayito solo sigue el protocolo, publicaste el tema en el foro de soporte para phpBB (3.0.x), este tema entra mejor en Recursos Webmaster.