Cómo acceder a una API REST en Symfony 3

Cómo acceder a una API REST en Symfony 3

REST es un estilo de arquitectura para diseñar aplicaciones en red. La idea es que, en lugar de utilizar mecanismos complejos como CORBA, RPC o SOAP para conectarse entre máquinas, se utilice HTTP simple para realizar llamadas entre máquinas. De muchas formas, la World Wide Web en sí, basada en HTTP, puede verse como una arquitectura basada en REST. Las aplicaciones RESTful usan solicitudes HTTP para publicar datos (crear y / o actualizar), leer datos (por ejemplo, realizar consultas) y eliminar datos. Por lo tanto, REST usa HTTP para las cuatro operaciones CRUD (Crear / Leer / Actualizar / Eliminar).

Debido a que las API REST utilizan HTTP, pueden ser utilizadas por prácticamente cualquier lenguaje de programación y son fáciles de probar (es un requisito de una API REST que el cliente y el servidor sean independientes entre sí, lo que permite codificar en cualquier idioma y mejorar al soportar la longevidad y evolución).

Un servicio web RESTful (también llamado API web RESTful) es un servicio web implementado usando HTTP y los principios de REST.

Básicamente, para acceder a una api necesitamos ejecutar una solicitud en diferentes formatos según la acción que queramos lograr en un endpoint (URL) de la api. Con javascript, una simple XMLHttpRequest debería funcionar, pero con PHP hay otra forma de lograrlo, llamada cURL.

cURL es una biblioteca que le permite realizar solicitudes HTTP en PHP. Todo lo que necesita saber al respecto (y la mayoría de las otras extensiones) se puede encontrar en el manual de PHP. Para utilizar las funciones cURL de PHP, aunque la mayoría de las distribuciones PHP ya tienen instalado cURL, si este no es su caso, entonces necesita instalar el paquete »libcURL.

Usando cURL por ti mismo

Como se mencionó anteriormente, cURL es la forma de acceder a una API relajante desde PHP.

El siguiente método le ayudará a obtener el 

Nota: se recomienda el uso de una biblioteca en lugar de cURL simple.

<?php
// Metodo: POST, PUT, GET etc
// Data: array("param" => "value") ==> index.php?param=value

function CallAPI($method, $url, $data = false)
{
    $curl = curl_init();

    switch ($method)
    {
        case "POST":
            curl_setopt($curl, CURLOPT_POST, 1);

            if ($data)
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_PUT, 1);
            break;
        default:
            if ($data)
                $url = sprintf("%s?%s", $url, http_build_query($data));
    }

    // Autenticación opcional:
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($curl, CURLOPT_USERPWD, "username:password");

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($curl);

    curl_close($curl);

    return $result;
}

Si hubo un error, el método devolverá falso. Puede leer el siguiente tema que explica cómo manejar errores usando cURL .

Usar una biblioteca (Unirest)

Usando bibliotecas en lugar de reinventar la rueda, es por eso que es mejor usar Unirest en lugar de escribir sus propias funciones de solicitud, ya que esta biblioteca se ocupa de muchos problemas comunes a los que se enfrentaría usando cURL simple y se mantiene.

Unirest es un conjunto de bibliotecas HTTP ligeras disponibles en varios idiomas, construido y mantenido por Mashape, quien también mantiene la API Gateway Kong de código abierto.

Caracteristicas

  • Métodos de utilidad a la llamada GETHEADPOSTPUTDELETECONNECTOPTIONSTRACEPATCHpeticiones.
  • Admite parámetros de formulario, carga de archivos y entidades corporales personalizadas.
  • Soporta gzip.
  • Admite la autenticación básica, implícita, negociada y NTLM de forma nativa.
  • Tiempo de espera personalizable.
  • Encabezados predeterminados personalizables para cada solicitud (DRY).
  • Análisis JSON automático en un objeto nativo para respuestas JSON.

Requisitos

  • rizo
  • PHP 5.4+

Para instalar Unirest PHP en su proyecto, use composer. Puede agregar la siguiente línea en su archivo composer.json:

{
    "require-dev": {
        "mashape/unirest-php": "2.*"
    }
}

O ejecute el comando en la consola directamente en su lugar:

composer require mashape/unirest-php

Entonces podrás usar Unirest agregando una declaración de uso simple en la parte superior de su clase use Unirest;.

Usando unirest

El siguiente código muestra una solicitud GET simple al punto final / search de la API de Spotify.

<?php

// buscar Canciones de Frank Sinatra
$headers = array('Accept' => 'application/json');
$query = array('q' => 'Frank sinatra', 'type' => 'track');
        
$response = Unirest\Request::get('https://api.spotify.com/v1/search',$headers,$query);
// o utilice una solicitud de texto sin formato
// $response = Unirest\Request::get('https://api.spotify.com/v1/search?q=Frank%20sinatra&type=track');

// Mostrar el resultado
dump($response->body);

Nota: si el código arroja un error con "Problema con el certificado SSL: no se puede obtener el certificado del emisor local" al usar Unirest con las API HTTPS, es posible que desee leer el siguiente artículo para aprender cómo resolverlo .

Body request Spotify API

La variable de respuesta tiene las siguientes propiedades:

  • encabezados [Matriz]: Matriz con el encabezado de la solicitud (Fecha, Servidor, etc.).
  • cuerpo
  • code [Int]: Código de respuesta de la solicitud.
  • raw_body: el contenido sin procesar de la solicitud.

Tenga en cuenta que la propiedad del cuerpo se convirtió automáticamente en una matriz ya que la API devuelve la respuesta en formato JSON. Lea más sobre Unirest PHP en el sitio web oficial .

Utilice los métodos más comunes de disturbios:

<?php

Unirest\Request::get($url, $headers = array(), $parameters = null)
Unirest\Request::post($url, $headers = array(), $body = null)
Unirest\Request::put($url, $headers = array(), $body = null)
Unirest\Request::patch($url, $headers = array(), $body = null)
Unirest\Request::delete($url, $headers = array(), $body = null)

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable