Cómo utilizar las API web en PHP 8.0

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: creación de una interfaz para la aplicación web
  • Paso 2: Recuperación de datos de una API RESTful
  • Paso 3: Visualización de los datos
  • Paso 4: Habilitar la entrada del usuario
  • Paso 5: Instalación de un kit de desarrollo de software (SDK)
  • Paso 6: Refactorización de su aplicación web con un SDK
  • El autor seleccionó el Tech Education Fund para recibir una donación como parte del programa Write for DOnations .

    Introducción

    Las API RESTful se utilizan de diversas formas y para muchos propósitos diferentes, como compartir recursos, automatizar tareas, validar de forma remota y más. Por ejemplo, algunas plataformas que ofrecen una API incluyen Facebook, LinkedIn, Twitter, GitHub y DigitalOcean. Al aprovechar las API de estas plataformas, sus aplicaciones pueden interactuar con estos sistemas remotos sin intervención humana. Por ejemplo, puede hacer que su aplicación publique imágenes en el muro de Facebook de su usuario, usar LinkedIn para corroborar la identidad de un usuario y generar nuevos droplets de Digital Ocean cuando la carga sea demasiado pesada.

    Si está familiarizado con el desarrollo de aplicaciones utilizando PHP , podrá utilizar los servicios existentes para potenciar sus aplicaciones sin tener que escribir programas grandes desde cero ni mantener infraestructuras complejas en línea.

    En este tutorial, creará un cliente para una API RESTful mediante llamadas HTTP POST y GET para interactuar con el servidor. Creará una aplicación web que tomará información de la API de OpenWeather Map y la mostrará. Comenzará con una aplicación básica antes de habilitar la entrada del usuario y usar un kit de desarrollo de software (SDK) para ayudar a preparar el código para el futuro. La aplicación web final brindará a los usuarios información meteorológica en tiempo real sobre una ciudad de su elección.

    Cuando se trabaja con una nueva API, un buen punto de partida es leer la documentación. En este caso, puede encontrar información útil en la guía de OpenWeather .

    Prerrequisitos

    Para completar este tutorial, necesitarás:

    • Un entorno de desarrollo local para PHP con compatibilidad con XML habilitada, que puede realizar siguiendo el Paso 1 del tutorial, Cómo instalar PHP 7.4 y configurar un entorno de desarrollo local en Ubuntu 20.04 . Al instalar paquetes adicionales al final del Paso 1, reemplace php7.4con php8.0donde sea necesario y elimine php7.4-jsondel comando de instalación del paquete.
    • Composer instalado en su máquina, lo cual puede hacer siguiendo los pasos 1 y 2 del tutorial, Cómo instalar y usar Composer .
    • Familiaridad con PHP, que puede obtener de la serie de tutoriales, Cómo codificar en PHP .
    • Una clave API para OpenWeather Map, que puede obtener creando una cuenta gratuita . Después de registrarse, navegue hasta Mis claves API en su cuenta.

    Paso 1: creación de una interfaz para la aplicación web

    En este paso, creará una versión básica de una aplicación web, que modificará en pasos posteriores. Aquí, creará un formulario HTML y un controlador de solicitudes.

    Comience creando un directorio para el proyecto ( weather-app) y navegue hasta él.

    1. mkdir weather-app
    2. cd weather-app

    Usando su editor de texto favorito o nano, cree un index.phparchivo:

    1. nano index.php

    Copie el siguiente contenido en su archivo:

    aplicación meteorológica/index.php

    htmlbody    h1Weather query/h1?phpif ( 'post' === strtolower($_SERVER['REQUEST_METHOD']) ) {?    h26.36/h2?php} else {?    form method="post"        input type="submit" value="Get London's temperature"    /form?php}?/body/html

    La primera ifdeclaración separa el formulario HTML y el controlador de solicitudes. La condición que está verificando ( 'post' === strtolower($_SERVER['REQUEST_METHOD'])) es qué verbo HTTP se utilizó para generar la solicitud. Aquí, se utiliza la comparación 'post' === strtolower($_SERVER['REQUEST_METHOD'])en lugar de una simple 'post' === $_SERVER['REQUEST_METHOD']para normalizar el valor en lugar de depender de la configuración del servidor web o del navegador.

    Si el método es post, significa que la solicitud se originó a partir del envío del formulario, por lo que sabemos que estamos en el segundo paso. Si el método no es post, puedes asumir con seguridad que es la primera visita del usuario al sitio, por lo que tiene sentido mostrarle el formulario y dejar que inicie el flujo de trabajo, que en este caso significa preguntar por la temperatura de Londres.

    Si observas más de cerca la parte “then” de la ifdeclaración, notarás que hay un 6.36valor fijo. Se trata de un número de marcador de posición aleatorio, que reemplazarás más adelante con datos en vivo.

    Guarde y cierre el archivo cuando haya terminado.

    A continuación, inicie el servidor web PHP integrado ejecutando el siguiente comando:

    1. php -S localhost:8707

    El resultado se verá así:

    [Wed Nov 17 11:54:10 2021] PHP 8.0.12 Development Server (http://localhost:8707) started

    Luego, abra una nueva pestaña en su navegador y apúntela a http://localhost:8707.

    Nota: Si está utilizando una máquina remota como en el tutorial de requisitos previos, Cómo instalar PHP 7.4 y configurar un entorno de desarrollo local en Ubuntu 20.04 , puede utilizar el reenvío de puertos para ver su aplicación. Después de iniciar el servidor web PHP, abra una nueva terminal en su máquina local y ejecute este comando: . Después de una conexión exitosa al servidor remoto, puede ver su aplicación en .ssh -L 8707:localhost:8707 your-non-root-user@your-server-iphttp://localhost:8707

    Verás una pantalla similar a esta:

    Haga clic en Obtener la temperatura de Londres para ver el resultado:

    Dado que los datos están actualmente codificados en la aplicación, 6.36es la única respuesta posible.

    En este paso, creaste una aplicación web que permite al usuario iniciar una consulta sobre la temperatura actual en Londres, que actualmente está codificada. En el siguiente paso, actualizarás tu aplicación para recuperar datos de una API.

    Paso 2: Recuperación de datos de una API RESTful

    En este paso, actualizará su aplicación para obtener los datos de una fuente confiable (OpenWeather Map).

    Existen muchas formas de obtener información de una API RESTful mediante PHP. Una de las formas más comunes es utilizar la biblioteca curl . Si bien esta biblioteca es perfectamente funcional, está diseñada para el control de bajo nivel sobre la comunicación HTTP, lo que puede volverse complicado en muchos casos.

    Aquí, usará la función file_get_contentspara leer desde una API RESTful. Es posible que esté familiarizado con el uso de esta función para leer archivos locales, pero el sistema de administración de flujo de PHP proporciona la misma abstracción sobre muchos mecanismos de almacenamiento subyacentes. Puede usarla file_get_contentspara leer desde un archivo remoto como si estuviera presente en su unidad local. Dado que un recurso RESTful se identifica mediante una URI, puede proporcionar su punto final a la función y devolverá el contenido de la respuesta enviada por el servidor remoto (ya sin encabezados).

    Si necesitara interactuar con el servidor de una manera más compleja (mediante autenticación, por ejemplo), podría hacerlo especificando un parámetro particular stream_contextcomo tercer parámetro.

    Para recuperar datos de la API de mapas OpenWeather, ábralos index.phppara editarlos y actualícelos como se muestra:

    aplicación meteorológica/index.php

    htmlbody    h1Weather query/h1?phpif ( 'post' === strtolower($_SERVER['REQUEST_METHOD'])) {?    h2?php echo file_get_contents('https://api.openweathermap.org/data/2.5/weather?mode=xmlunits=metricq=Londonappid=YOUR_API_KEY'); ?/h2?php} else {    ?    form method="post"        input type="submit" value="Get London's temperature"    /form?php}?/body/html

    Recuerde cambiar YOUR_API_KEYel valor real de su clave API de OpenWeather.

    Este script toma una URL fija , realiza una llamada HTTP y genera la respuesta exactamente como la recibió.https://api.openweathermap.org/data/2.5/weather?mode=xmlunits=metricq=Londonappid=YOUR_API_KEY

    Esta URL se compone de:

    • Una URL base ( https://api.openweathermap.org/data/2.5/)
    • Un punto final ( weather)
    • La cadena de consulta ( )?mode=xmlunits=metricq=Londonappid=YOUR_API_KEY

    Esta es una estructura común para las API RESTful. La URL base será la misma sin importar qué recurso estés buscando. El punto final variará según el tipo específico de información que estés buscando y, por último, la cadena de consulta se utilizará para brindar algunas opciones para refinar tu solicitud.

    En este caso, utilizamos los siguientes modificadores:

    • mode:formato que queremos que utilice la respuesta, xmlen nuestro caso.
    • units:unidades de medida, metricen nuestro caso.
    • q:expresión de ciudad, Londonen nuestro caso.
    • appid:Clave API.

    Para conocer parámetros adicionales, consulte la documentación del producto OpenWeather .

    Guarde y cierre el archivo cuando haya terminado.

    Regrese a su navegador y actualice la página para ver el resultado. El resultado será similar a esto:

    En este punto, el resultado no es el que un usuario esperaría: devuelve la designación del país de Gran Bretaña ( GB) y la zona horaria ( 3600).

    Si observa el código fuente de la página, verá un resultado similar al siguiente:

    Código fuente de la aplicación web

    htmlbodyh1Weather query/h1h2  ?xml version="1.0" encoding="UTF-8"?  current    city name="London"      coord lon="-0.1257" lat="51.5085"/coord      countryGB/country      timezone3600/timezone      sun rise="2022-04-12T05:11:24" set="2022-04-12T18:50:48"/sun    /city    temperature value="18.21" min="15.02" max="19.87" unit="celsius"/temperature    feels_like value="17.73" unit="celsius"/feels_like    humidity value="63" unit="%"/humidity    pressure value="1006" unit="hPa"/pressure    wind      speed value="4.63" unit="m/s" name="Gentle Breeze"/speed      gusts/gusts      direction value="210" code="SSW" name="South-southwest"/direction    /wind    clouds value="40" name="scattered clouds"/clouds    visibility value="10000"/visibility    precipitation mode="no"/precipitation    weather number="802" value="scattered clouds" icon="03d"/weather    lastupdate value="2022-04-12T14:11:48"/lastupdate  /current/h2/body/html

    El problema es que el script está generando la respuesta del servidor API exactamente como la recibió, por lo que depende del navegador representarla correctamente. Dado que la respuesta del servidor API es XML, el navegador interpreta las etiquetas lo mejor que puede: el navegador ignora todas las etiquetas que no sean HTML (como city, temperature, etc.). Para solucionar este problema, actualizará la aplicación para analizar la respuesta XML y extraer las partes que tienen significado para el usuario: el contenido de la temperatureetiqueta.

    En este paso, actualizaste tu aplicación para consultar la API remota y obtener información en tiempo real. En el siguiente paso, actualizarás la aplicación para analizar los datos XML que recibe.

    Paso 3: Visualización de los datos

    En este punto, tu aplicación consulta a un servidor remoto y recibe una respuesta. Dado que la información recibida es XML, es necesario analizarla para obtener información específica, como la temperatura de una ciudad. En este paso, actualizarás la aplicación para transformar la respuesta XML y mostrar información relevante para el usuario.

    Un enfoque consiste en analizar los datos manualmente, por ejemplo, mediante expresiones regulares . Sin embargo, este enfoque puede ser complejo y propenso a errores. Un enfoque mejor es utilizar la clase SimpleXMLElement. Esta clase está diseñada específicamente para abordar las complejidades de XML y proporciona una interfaz fácil de usar.

    Abra su index.phparchivo para editarlo y actualícelo para que se vea así:

    aplicación meteorológica/index.php

    htmlbody    h1Weather query/h1?phpif ( 'post' === strtolower($_SERVER['REQUEST_METHOD'])) {    ?h2?php    $xml = new SimpleXMLElement('https://api.openweathermap.org/data/2.5/weather?mode=xmlunits=metricq=Londonappid=YOUR_API_KEY', 0, true);    echo $xml-temperature['value'];    ?/h2?php} else {    ?    form method="post"        input type="submit" value="Get London's temperature"    /form?php}?/body/html

    Recuerde reemplazar YOUR_API_KEYcon el valor real de su clave API.

    $xmles una instancia de SimpleXMLElement. Cada nodo secundario en el texto XML es una propiedad pública del mismo y los atributos son accesibles como claves de matriz.

    La llamada al constructor de la clase se realiza suministrando tres parámetros. El primero es una fuente de datos. En este caso, se especifica una URL como fuente de los datos XML: .https://api.openweathermap.org/data/2.5/weather?mode=xmlunits=metricq=Londonappid=YOUR_API_KEY

    A continuación, se incluye un modificador de opciones, que especifica cómo se interpreta el XML. En este caso, se utiliza un 0, lo que significa que se deben utilizar las opciones predeterminadas. El tercer argumento es un truevalor. SimpleXMLElementSe puede crear un objeto utilizando dos posibles fuentes: un valor XML literal o una URL. Al emitir un true, se indica que se debe utilizar la URL.

    La línea echo $xml-temperature['value'];aprovecha la interfaz orientada a objetos que ofrece SimpleXMLElement. La función básica de esta clase es convertir una cadena que se supone que es un XML bien formado en una estructura de árbol fácil de usar.

    Entonces, si miramos nuevamente el XML devuelto por el servidor:

    Código fuente de la aplicación web

    ?xml version="1.0" encoding="UTF-8"?  current    city name="London"      coord lon="-0.1257" lat="51.5085"/coord      countryGB/country      timezone3600/timezone      sun rise="2022-04-12T05:11:24" set="2022-04-12T18:50:48"/sun    /city    temperature value="18.21" min="15.02" max="19.87" unit="celsius"/temperature    feels_like value="17.73" unit="celsius"/feels_like    humidity value="63" unit="%"/humidity    pressure value="1006" unit="hPa"/pressure    wind      speed value="4.63" unit="m/s" name="Gentle Breeze"/speed      gusts/gusts      direction value="210" code="SSW" name="South-southwest"/direction    /wind    clouds value="40" name="scattered clouds"/clouds    visibility value="10000"/visibility    precipitation mode="no"/precipitation    weather number="802" value="scattered clouds" icon="03d"/weather    lastupdate value="2022-04-12T14:11:48"/lastupdate  /current

    Verás que el $xmlobjeto tiene las siguientes propiedades:

    • city
    • temperature
    • feels_like
    • humidity
    • pressure
    • wind
    • clouds
    • visibility
    • precipitation
    • weather
    • lastupdate

    Cada una de estas propiedades es también una instancia de SimpleXMLElement.

    En este caso, solo te interesa un atributo del temperature/elemento: value. Por lo tanto, al usar $xml-temperature['value']obtienes lo que se muestra 18.21en el ejemplo anterior.

    Guarde y cierre el archivo cuando haya terminado.

    Regrese a su navegador, actualice la página y debería ver algo similar a lo siguiente:

    El número que aparece en el resultado probablemente sea diferente. Esto es lo que se espera, ya que la aplicación está ejecutando una consulta en tiempo real.

    Ahora tu aplicación puede analizar los datos XML. SimpleXMLElementLee la URL que proporcionaste, analiza el resultado y crea una representación orientada a objetos del texto devuelto por el servidor remoto. Una vez hecho esto, tu aplicación puede hacer referencia al valor de temperatura como una propiedad del SimpleXMLElementobjeto.

    En este punto, su script puede mostrar información en vivo extraída de una fuente confiable en un formato que sea significativo para los usuarios finales. En el siguiente paso, incorporará interactividad a la aplicación al habilitar la entrada del usuario.

    Paso 4: Habilitar la entrada del usuario

    En este paso, permitirá que el usuario consulte la temperatura de diferentes ciudades. Para ello, deberá modificar la URL de la fuente de datos para obtener diferentes resultados del servidor remoto.

    El primer cambio es mostrar un menú desplegable de ciudades en la primera pantalla para que el usuario pueda seleccionar la ciudad que le interesa. Abra index.phpel formulario para editarlo y actualizarlo como se muestra a continuación:

    aplicación meteorológica/index.php

    htmlbody    h1Weather query/h1?phpif ( 'post' === strtolower($_SERVER['REQUEST_METHOD'])) {    ?h2?php    $xml = new SimpleXMLElement('https://api.openweathermap.org/data/2.5/weather?mode=xmlunits=metricq=Londonappid=YOUR_API_KEY', 0, true);    echo $xml-temperature['value'];    ?/h2?php} else {    ?    form method="post"        label for="city"Select your city/label        select name="city"            option value="London"London/option            option value="Buenos Aires"Buenos Aires/option            option value="New York"New York/option            option value="Paris"Paris/option        /select        input type="submit" value="Get your city's temperature"    /form?php}?/body/html

    Ahora la aplicación mostrará una selección desplegable para el usuario, para que pueda elegir sobre qué ciudad desea obtener información, en lugar de tenerla fija en London.

    ifSin embargo, para que el script consulte la ciudad seleccionada, también deberá cambiar la primera parte de la declaración. Actualice la URL de la fuente de datos como se muestra:

    aplicación meteorológica/index.php

    htmlbody    h1Weather query/h1?phpif ( 'post' === strtolower($_SERVER['REQUEST_METHOD'])) {    ?h2?php    $xml = new SimpleXMLElement('`https://api.openweathermap.org/data/2.5/weather?mode=xmlunits=metricq=`'.$_POST['city'].'appid=YOUR_API_KEY', 0, true);    echo $xml-temperature['value'];    ?/h2?php} else {    ?    form method="post"        label for="city"Select your city/label        select name="city"            option value="London"London/option            option value="Buenos Aires"Buenos Aires/option            option value="New York"New York/option            option value="Paris"Paris/option        /select        input type="submit" value="Get your city's temperature"    /form?php}?/body/html

    Aquí, cambiaste el valor del qparámetro de Londona la ciudad seleccionada por el usuario. La URL se crea como una concatenación de:

    1. https://api.openweathermap.org/data/2.5/weather?mode=xmlunits=metricq=
    2. $_POST['city']
    3. 'appid=YOUR_API_KEY'

    Guarde y cierre el archivo cuando haya terminado.

    Nota: Esta es la forma en que OpenWeather Map maneja los parámetros. Para otras API, deberá consultar la documentación específica para obtener más detalles.

    Para ver los cambios, vuelve a tu navegador y comienza a navegar nuevamente. Ahora tu aplicación debería mostrar un menú desplegable para seleccionar una ciudad:

    Seleccionar diferentes ciudades ahora debería devolver diferentes valores de temperatura.

    En este paso, habilitó la entrada del usuario en su aplicación y actualizó la URL de la fuente de datos para recuperar datos según la selección del usuario.

    Sin embargo, en este punto, el código está estrechamente acoplado a la estructura actual de la respuesta de la API, lo que no es muy a prueba de futuro. Actualmente, tiene sentido buscar la temperatureetiqueta como un elemento secundario de primer nivel del elemento raíz, pero eso podría cambiar en cualquier momento y, si eso sucede, el código de la aplicación tendría que actualizarse para que siga funcionando. Una forma de abordar este problema es utilizar un kit de desarrollo de software (SDK), lo que hará en el siguiente paso.

    Paso 5: Instalación de un kit de desarrollo de software (SDK)

    En este paso, instalará el cliente PHP de OpenWeather Map . Este cliente aísla por completo la lógica de su aplicación de los detalles específicos de cómo comunicarse con los servidores de OpenWeather Map, lo que genera una aplicación mucho más preparada para el futuro. En lugar de recuperar los datos manualmente, como lo hizo en los pasos anteriores, utilizará el SDK para recuperar los datos por usted.

    El uso de un SDK en las aplicaciones hace que sean mucho más fáciles de mantener a lo largo del tiempo. Por ejemplo, si se produce un cambio en la forma en que el servidor quiere que el cliente interactúe con él, todo lo que hay que hacer es actualizar el SDK. En comparación, si se codificaran las solicitudes por uno mismo, adaptar el código requeriría un gran esfuerzo para rastrear cada llamada remota y actualizarla. Además, también existe la posibilidad de que aparezcan nuevos errores.

    El primer paso para utilizar el SDK PHP de OpenWeather Map es instalarlo. En este tutorial, utilizará Composer , un administrador de dependencias para PHP, que instaló como parte de los requisitos previos.

    Una vez que tenga Composer disponible, ejecute el siguiente comando para instalar el SDK y sus dependencias:

    1. composer require "cmfcmf/openweathermap-php-api" "http-interop/http-factory-guzzle:^1.0" "php-http/guzzle6-adapter:^2.0 || ^1.0"

    El SDK en sí es el paquete cmfcmf/openweathermap-php-api. http-interop/http-factory-guzzley php-http/guzzle6-adapterson paquetes auxiliares necesarios para manejar la comunicación HTTP en un nivel inferior.

    Esto producirá el siguiente resultado:

    1. Using version ^3.3 for cmfcmf/openweathermap-php-api
    2. ./composer.json has been created
    3. Running composer update cmfcmf/openweathermap-php-api http-interop/http-factory-guzzle php-http/guzzle6-adapter
    4. Loading composer repositories with package information
    5. Updating dependencies
    6. Lock file operations: 16 installs, 0 updates, 0 removals
    7. - Locking cmfcmf/openweathermap-php-api (v3.3.0)
    8. - Locking guzzlehttp/guzzle (6.5.5)
    9. - Locking guzzlehttp/promises (1.5.1)
    10. - Locking guzzlehttp/psr7 (1.8.3)
    11. - Locking http-interop/http-factory-guzzle (1.2.0)
    12. - Locking php-http/guzzle6-adapter (v2.0.2)
    13. - Locking php-http/httplug (2.2.0)
    14. - Locking php-http/promise (1.1.0)
    15. - Locking psr/cache (1.0.1)
    16. - Locking psr/http-client (1.0.1)
    17. - Locking psr/http-factory (1.0.1)
    18. - Locking psr/http-message (1.0.1)
    19. - Locking ralouphie/getallheaders (3.0.3)
    20. - Locking symfony/polyfill-intl-idn (v1.23.0)
    21. - Locking symfony/polyfill-intl-normalizer (v1.23.0)
    22. - Locking symfony/polyfill-php72 (v1.23.0)
    23. Writing lock file
    24. Installing dependencies from lock file (including require-dev)
    25. Package operations: 16 installs, 0 updates, 0 removals
    26. - Installing psr/http-message (1.0.1): Extracting archive
    27. - Installing psr/http-factory (1.0.1): Extracting archive
    28. - Installing psr/http-client (1.0.1): Extracting archive
    29. - Installing psr/cache (1.0.1): Extracting archive
    30. - Installing cmfcmf/openweathermap-php-api (v3.3.0): Extracting archive
    31. - Installing guzzlehttp/promises (1.5.1): Extracting archive
    32. - Installing ralouphie/getallheaders (3.0.3): Extracting archive
    33. - Installing guzzlehttp/psr7 (1.8.3): Extracting archive
    34. - Installing http-interop/http-factory-guzzle (1.2.0): Extracting archive
    35. - Installing php-http/promise (1.1.0): Extracting archive
    36. - Installing php-http/httplug (2.2.0): Extracting archive
    37. - Installing symfony/polyfill-php72 (v1.23.0): Extracting archive
    38. - Installing symfony/polyfill-intl-normalizer (v1.23.0): Extracting archive
    39. - Installing symfony/polyfill-intl-idn (v1.23.0): Extracting archive
    40. - Installing guzzlehttp/guzzle (6.5.5): Extracting archive
    41. - Installing php-http/guzzle6-adapter (v2.0.2): Extracting archive
    42. 2 package suggestions were added by new dependencies, use `composer suggest` to see details.
    43. Generating autoload files
    44. 6 packages you are using are looking for funding.
    45. Use the `composer fund` command to find out more!

    Ahora tienes un nuevo directorio dentro de tu proyecto: vendor. Este directorio es donde se encontrarán todas las dependencias instaladas a través de Composer.

    Junto con el código de la biblioteca, hay un archivo que brinda acceso a todos ellos: autoload.php. Deberá incluir este archivo al comienzo de cada script que necesite usar alguna de las dependencias que incorpore.

    En este paso, agregó una nueva dependencia a su aplicación: un cliente orientado a objetos para la API de OpenWeather Map. Al confiar en él, obtendrá una interfaz de codificación mucho más clara, lo que lo ayudará a reducir el esfuerzo general de actualizar su código para que coincida con las nuevas versiones de la API.

    Paso 6: Refactorización de su aplicación web con un SDK

    En este paso, refactorizará su código para utilizar el SDK instalado en el paso anterior. Necesitará el código del SDK en su secuencia de comandos y utilizará los objetos proporcionados dentro de la biblioteca para acceder a la API remota.

    Ábrelo index.phppara editarlo y actualízalo para que se vea así:

    aplicación meteorológica/index.php

    ?phpuse CmfcmfOpenWeatherMap;use CmfcmfOpenWeatherMapException as OWMException;use HttpFactoryGuzzleRequestFactory;use HttpAdapterGuzzle6Client as GuzzleAdapter;?htmlbody    h1Weather query/h1?phpif ( 'post' === strtolower($_SERVER['REQUEST_METHOD'])) {    require_once 'vendor/autoload.php';    $city = $_POST['city'];    $owm = new OpenWeatherMap('YOUR_API_KEY', GuzzleAdapter::createWithConfig([]), new RequestFactory());    try {        $weather = $owm-getWeather($city, 'metric', 'en');        ?h2?php echo $weather-temperature; ?/h2        ?php    } catch(OWMException $e) {        echo 'OpenWeatherMap exception: ' . $e-getMessage() . ' (Code ' . $e-getCode() . ').';    } catch(Exception $e) {        echo 'General exception: ' . $e-getMessage() . ' (Code ' . $e-getCode() . ').';    }} else {    ?    form method="post"        label for="city"Select your city/label        select name="city"            option value="London"London/option            option value="Buenos Aires"Buenos Aires/option            option value="New York"New York/option            option value="Paris"Paris/option        /select        input type="submit" value="Get your city's temperature"    /form?php}?/body/html

    Recuerde reemplazar YOUR_API_KEYcon el valor real de su clave API.

    Comienza declarando espacios de nombres en la parte superior ( use ...declaraciones). Con estas líneas, le indicas al intérprete cómo asignar nombres de clase cortos a nombres completamente clasificados (por ejemplo, OpenWeatherMapa CmfcmfOpenWeatherMap), lo que hace que el código sea más fácil de leer y escribir.

    También has incluido el vendor/autoload.phparchivo. Este archivo fue creado por composery contiene las llamadas necesarias para spl_autoload_registerpermitirte crear nuevas instancias de clases que no son requeridas explícitamente por tu script.

    El cambio más significativo es el uso de un método ( getWeather) para realizar la llamada al servidor remoto, lo que deja el código limpio y mucho más fácil de mantener a lo largo del tiempo. La llamada HTTP y la transformación del texto en un objeto PHP se realizan automáticamente. De alguna manera, puedes olvidarte de que se está realizando una llamada remota y trabajar como si tuvieras acceso directo a la información meteorológica. Y, si la respuesta del servidor cambia, todo lo que tendrías que hacer es actualizar la versión del SDK en lugar de modificar cada instancia de tu código donde se realicen llamadas a la API.

    A continuación, realizó un cambio para capturar excepciones. Al trabajar con sistemas externos, es una buena práctica anticipar problemas, como que el servidor remoto deje de responder o que falle la red local. Si no captura excepciones, en caso de que ocurran, generarán una experiencia de usuario desagradable e incluso podrían afectar la estabilidad del sistema, ya que la ejecución del script se detendría inesperadamente.

    Aquí, hay dos catchdeclaraciones en este script para facilitar la depuración. Dado que el método OpenWeatherMap::getWeatherlanza excepciones específicas ( OWMException), tiene sentido usarlas y dejar otro catch-allcontrolador de excepciones en caso de que haya una excepción desconocida.

    Guarde y cierre el archivo cuando haya terminado.

    Si actualiza la página, verá un ligero cambio en el resultado:

    Ahora, junto a la temperatura aparece el símbolo Celsius.

    Esto sucede porque tu aplicación ahora está usando echo $weather-temperature;para generar su salida, y $weather-temperaturees un objeto de CmfcmfOpenWeatherMapUtilTemperatureclase, que implementa un __toStringmétodo que incluye las unidades en su valor de retorno. Si quisieras obtener la misma salida que en el paso anterior, podrías usar echo $weather-temperature-getValue()en su lugar.

    En este paso, hizo que su aplicación fuera mucho más fácil de mantener al aprovechar un SDK existente para abstraer los detalles de comunicación de bajo nivel.

    Solo queda un paso final para que tu aplicación esté lista para producción: eliminar la clave codificada API_KEY. Si la clave permanece codificada, cada

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion