Después de encapsular y agregar funcionalidad a nuestra clase Request, que es la que se encarga de procesar la petición del usuario a nuestra URL; haremos algo similar con nuestra clase Response, ya que esta clase se encarga de mandar la respuestas del servidor al usuario.

Basado en que la respuesta al cliente al día de hoy, lo mas común es por medio de JSON, le agregaremos un método a nuestra clase Response que regrese un JSON; después encapsularemos nuestra clase Response con un helper. También regresaremos un código de respuesta; esto nos servirá para validar esa respuesta en nuestra vista cuando hagamos llamados AJAX a nuestras rutas o controladores.

Puedes consultar los códigos del API RESTFUL aquí: https://restfulapi.net/http-status-codes/

Creando el método json() de nuestra clase Response.

Empecemos por modificar nuestra clase Response(src\Utils):

Copiar código:public function json($dataResponse, int $codeResponse = 200)
{
$processData = $dataResponse;

if (is_object($dataResponse)) {
$processData = $dataResponse->toArray();
}

header("Content-Type: application/json: { $codeResponse }", true, $codeResponse);
echo json_encode($processData);
}

Este método procesa los datos que le mandamos y los convierte en JSON, también tiene una validación sobre si los datos que le mandamos($dataResponse) es un objeto, aunque por el momento no lo vamos a usar, nos servirá cuando queramos pasar datos de una colección de algún modelo de nuestra app.

Para implementar simplemente hacemos lo siguiente:

Copiar código:$response = new Utils\Response();
$data = [
['codigo' => '001', 'pokemon' => 'Bulbasaur'],
['codigo' => '002', 'pokemon' => 'Ivysaur'],
['codigo' => '003', 'pokemon' => 'Venusaur'],
['codigo' => '004', 'pokemon' => 'Charmander'],
['codigo' => '005', 'pokemon' => 'Charmeleon'],
];

$response->json($data, 200);

Como ejemplo rápido de como se puede cambiar el código de la respuesta es por medio de controlador de excepciones(try/catch).

Copiar código:$response = new Utils\Response();
$pokemon = new Pokemon();
$responseData = [
'message' => 'Ocurrio un error al inserta el Pokemon!',
'code' => 500,
];

try {
$params = request()->getUrlParams(true);

$pokemon->codigo = $params->codigo;
$pokemon->pokemon = $params->pokemon;

$pokemon->save();

$responseData['message'] = 'Pokemon Insertado con exito!';
$responseData['code'] = 201;
} catch (Exception $e) {
$responseData['error'] = $e->getMessage();
}
$response->json($responseData, $responseData['code']);

Implementando en alguna ruta se vería así la respuesta:

Creando el helper de nuestra clase Response.

Tal cual lo hicimos con nuestra clase Request, también lo haremos con Response, crearemos un helper para tener un rápido acceso a la clase:

Modificamos el archivo helpers.php(src/Utils):

Copiar código:if (! function_exists('response')) {
function response()
{
return new Response();
}
}

Para implementar el helper simplemente escribimos:

Copiar código:response()->json($data, $code);

Con la codificación del método json() y la creación de un helper de la clase Response; ya tendríamos listo nuestro set de herramientas o métodos para poder procesar toda la información que nos manden por la URL y ejecutarla en una ruta con una función o con un controlador.

Nuestra siguiente publicación ya esta lista y la puedes revisar aquí: https://link.medium.com/kZhuCJwFyab. En ella configuraremos el paquete Eloquent y crearemos el modelo para acceder a la información de la base de datos.

Pueden consultar el código de esta publicación en este repositorio: https://github.com/krsrk/pokedex-vanilla-php

Si les gusto la publicación denle claps, likes y comentarios.

--

--

Chris Lopez
Chris Lopez

Written by Chris Lopez

Laravel, PHP, Python, Js, Vue Developer

No responses yet