PHP Consumindo un servizo de Laravel
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).