notifications Notificaciones

Marcar todas como leídas

Ver más

lightbulb_outline

Consumir REST API con laravel

timer 1 Min.

remove_red_eye 6394

calendar_today

Para poder consumir una api de un tercero necesitaremos de un cliente, el cliente que usaremos es llamado guzzlehttp.

Configuración

Entonces para poder integrar a este cliente, instalaremos la dependecia dentro de nuestro proyecto.

composer require guzzlehttp/guzzle

Ahora para poder usar a este paquete sólo tenemos que importar a nuestra clase usando.

use GuzzleHttp\Client;

Con esto ya podremos crear una intancia de la clase client y comenzar a realizar peticiones. Pero para evitar crear instancias dentro de nuestro controladores, usaremos a el container de laravel para poder hacer inyección de dependecias en nuestro controladores, entonces lo que haremos será modificar al archivo AppServiceProvider que se encuentra en la carpeta app/Providers .

Dentro del método registre haremos el registro de nuestra clase, lo primero que haremos será importar a nuestro clase cliente al incio de nuestro archivo.

use GuzzleHttp\Client;

Algo que también podemos hacer es definir una variable de entorno dentro de l archivo .env y .env-example, que contenga el endpoint de la api.

API_ENDPOINT=https://jsonplaceholder.typicode.com

Ahora dentro del método register en el archivo AppServiceProvider vamos a proceder a registar a nuestro objecto.

Lo primero que haremos será obtener el valor de nuestra variable de entorno, para ello podemos apoyarnos del helper env.

$baseUrl = env('API_ENDPOINT');

Y como siguente paso, procederemos a registar a nuestro objecto(Usando a un objeto singleton).

$this->app->singleton(Client::class, function($app) use ($baseUrl) {
        return new Client(['base_uri' => $baseUrl]);
});

Una vez realizado este paso, ya podremos hacer inyección de dependecias de este objeto dentro de nuestro controladores.

Por ejemplo vamos a la ruta raiz dentro del archivo web.php importamos a nuestro cliente.

use GuzzleHttp\Client;

Y dentro de la función agregamos como parametro a nuestro cliente.

Route::get('/', function (GuzzleHttp\Client $client) 

Ahora obtengamos a los post de nuestra api.

 $response = $client->request('GET', "posts");

Hacemos un parse del resultado a json usando json_decode.

$data = json_decode($response->getBody());

Si ahora hacemos un.

dd($data);

Y si vamos al navegador veremos a todos nuestros posts.

Métodos

Ahora veremos los métodos más utiles de esta libreria.

El crud completo.


$client->request('GET', '/posts');
$client->request('POST', '/posts', ['title' => 'foo']);
$client->request('PUT', '/posts/:id', ['title' => 'bar']);
$client->request('DELETE', '/posts/:id');

Ahora bien si queremos obtener el código de estatus podemos usar al método.

$response = $client->request('GET', "posts");
$response->getStatusCode();

Y para obtener el resultado que nos devuele la petición usaremos.

$response = $client->request('GET', "posts");
$response->getBody();

Otros artículos del blog

Comunidad