PHP Consumindo un servizo de Laravel

De MediaWiki
Ir a la navegación Ir a la búsqueda

Introducción

  • Na UD6 vimos como desenvolver un servizo Web.
O que imos facer nesta unidade é crear un novo proxecto Web e imos facer uso do servizo web creado na UD6.


  • Para iso, abrides

Usar un servizo externo

* Comando para instalación: composer require guzzlehttp/guzzle


Exemplo de código

  • Neste código imos amosar como facer unha chamada a unha API Externa.
........
use \GuzzleHttp\Client;

class ApiExternaController extends Controller
{

    public function index()
    {
        $client = new \GuzzleHttp\Client();
        $res = $client->get('https://XXXX.XXXXX.XX/api/XXXXXXXX/XXXXXX/json?key=XXXXXXXXXXXXXX&query=parametro&language=es');
        echo $res->getStatusCode(); // 200
        $datos = json_decode($res->getBody(),true);
        var_dump($datos);
    }
    ..................
  • Liña 3: Temos que facer uso da clase Client de GuzzleHttp.
  • Liña 10: Facemos a petición a API Externa. Fixarse que normalmente teredes que enviar algún tipo de autenticación. Neste caso enviamos unha API Key xa que o servizo pertence a Google.
Dita API espera recibir na URL o formato de saída (xml ou json), e tamén pode levar parámetros como uha cadea de busca ou a linguaxe do resultado.
  • Liña 11: Podemos obter o código de erro devolto pola API (200 é correcto como xa vimos anteriormente).
  • Liña 12: Utilizamos a función json_decode có parámetro a true para que devolva os datos como un array asociativo.


  • O var_dump dará como resultado:
array (size=4)
  'html_attributions' => 
    array (size=0)
      empty
  'next_page_token' => string 'CvQB5QAAAB-Q718qEtEfzZnccxK0THwIjfCrwGbkVsvEoQaiGyMWBj6Z3-DW1_9UWJaKANfpAahtoMP7AEjcb1JzLzRvJa9gBIueMXhxGzSPhHwKXxiI6Gp2NVQUHRcr0wW2VgAmVHKCGYid01wI8C_r0SaD3iHIB-0Fr5h2IRy4DsmjN6L9oJMaOQTBtAgCN7sCH6imRmMd2lq5XZW9pWHA3JeOAJt4HhKb34X8fjNNKgiIvOi0XPPcRPoIYJ-NcphGShTgA_Fhnl02vyqnn8mbzGMA9xU4yBObOx-cfd5qMKHYLdb5p0L6ctNa_SIV5YM_YUSFwRIQthy2TYyPTmUNwbBfFDMP5xoUPNoKN8AtwpDHFVgOb44DjIBGffU' (length=383)
  'results' => 
    array (size=20)
      0 => 
        array (size=10)
          'formatted_address' => string 'Rúa María, 2, 15402 Ferrol, A Coruña, España' (length=48)
          'geometry' => 
            array (size=2)
              ...
          'icon' => string 'https://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png' (length=67)
          'id' => string '7c7088e7c654ba30efa1e384e0881bebee8cf065' (length=40)
          'name' => string 'Asador Gavia' (length=12)
          'photos' => 
            array (size=1)
              ...
          'place_id' => string 'ChIJ22OacwV2Lg0RLObpSmq3D6k' (length=27)
          'rating' => float 4.2
          'reference' => string 'CmRSAAAAG-LM_2yc9TTbC8l4HoczU2OPnFPs6eYHzoLwJBwGeSiFT9XvalSDcOb0bLZXHDxp3tSAswl57eXpcZGvAIDiYfckbnl7eIxhLl722qHdn4qv-py6_umtqt2pvzoWGC3EEhA8MgKa1gD9lEzOD_EGSqlgGhT8YjPOdYP3d9C9oB9IdHEr92yvEQ' (length=190)
          'types' => 
            array (size=4)
              ...
      1 => 
        array (size=10)
          'formatted_address' => string 'Lugar Bosque, 73 - Bajo, 15405 Ferrol, A Coruña, España' (length=57)
          'geometry' => 
            array (size=2)
              ...
          'icon' => string 'https://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png' (length=67)
          'id' => string 'd0d3a7fb96efe558e00268ba18bf7c9f7e003d67' (length=40)
          'name' => string 'Medulio' (length=7)
          'photos' => 
            array (size=1)
              ...
          'place_id' => string 'ChIJI7bO3KPYLQ0R5CVGKcTigTg' (length=27)
          'rating' => float 4.2
          'reference' => string 'CmRRAAAA_pB5EDe4puf3vqpGI2ACBvg5C5AchtIyS306-m7j_TBzbYsN9KNz8zU-W2u7qhPh1WptaIC5La2JXJxOeGfIlqekxmtKF27PQwz8q503Nbizc7sNH7OKcIhbKm_rssA1EhC9ikBsyUqi3ruykyou0NHGGhTpsMBsUvdbBYkcutfmME-AuOwzWA' (length=190)
          'types' => 
            array (size


  • Liña 6: A nos interésanos a clave 'results', polo tanto: $datos['results'] (que é un array asociativo) accederemos ao conxunto de resultados. Soamente teremos que percorrer dito array (foreach) e por cada elemento ($dato) acceder ás propiedades que nos interesen ($dato['name'] ou $dato['formatted_address'] por exemplo).
Esta información sería gardada nun array que será enviado á vista para que amose o resultado.



  • Se a API espera recibir un login e ou password, debemos envialo desta forma:
         .....................
         $res = $client->get('url',[
             'auth' =>
                ['username',
                 'password'
                ]
         ]);


  • Lembrar que esta información envíase cifrada con base64 e se se captura o tráfico pódese descifrar facilmente.
O ideal sería utilizar unha comunicación https cifrada con SSL.






-- Ángel D. Fernández González -- (2024).