Hace poco hice una presentación sobre el uso de la nube y las API REST de Delphi en la conferencia italiana Delphi Day, a fines de junio. Entre las diversas demostraciones, realicé algunos experimentos con las API REST de APILayer. Por si no lo sabes, APILayer es una empresa que forma parte de Idera, al igual que Embarcadero.
Tabla de contenido
Por qué las API REST
Antes de explorar demostraciones y API específicas, me gustaría discutir la relevancia de usar API en el contexto de una aplicación de cliente como las creadas con Delphi. En el pasado, la forma más común de agregar una función a un programa era escribir el código adecuado o usar una biblioteca existente para agregar la capacidad y distribuir el código compilado de la función junto con la aplicación.
Los servicios en línea y las API REST de hoy en día a menudo ofrecen capacidades similares que se activan al pasar los parámetros adecuados con una llamada HTTP a un servidor y recibir el resultado. Los ejemplos incluyen transformaciones de imágenes, creación de un PDF, transformación de texto a voz o lectura del texto incrustado en una imagen.
¿Por qué usaría un enfoque sobre el otro? Hay casos en los que solo una de las alternativas es realista (la representación gráfica de rendimiento rápido requiere una biblioteca gráfica instalada, mientras que una capacidad de IA generalmente está disponible en línea), pero en otros escenarios, ambos enfoques pueden ser posibles.
El uso de una biblioteca local tiene la ventaja de:
- Ejecución generalmente más rápida
- Sin necesidad de una conexión a Internet
- Posiblemente la capacidad de ajustar y personalizar la función y vincularla mejor con el código y la interfaz de usuario.
- A nivel de seguridad, no necesita preocuparse por el cifrado de la comunicación para evitar que alguien acceda a los datos de la aplicación en tránsito.
El uso de una API REST tiene la ventaja de:
- Mantener la aplicación más pequeña, ya que no necesita distribuir código de biblioteca adicional
- Utilice siempre la última versión de la biblioteca, ya que se puede actualizar por separado de la aplicación cliente
- A nivel de seguridad, no necesita preocuparse por actualizar la biblioteca en caso de que se descubra algún problema, debiendo implementar una nueva versión de la aplicación.
Finalmente, a menudo hay una diferencia entre los costos de una biblioteca y una API REST:
- A menos que la biblioteca sea gratuita y de código abierto, generalmente tendría un costo fijo inicial por desarrollador
- La mayoría de las API REST tienen un modelo de pago por uso, a menudo con un nivel gratuito que puede usar para desarrollo y pruebas.
- Por lo tanto, la API REST puede ser más barata para un uso limitado, pero se vuelve más costosa para un uso extensivo.
Presentamos APILayer
APILayer es una empresa de Idera enfocada en ofrecer API alojadas y en crear un Mercado de API, alojando también API de terceros. Puede leer más sobre los muchos servicios disponibles en https://apilayer.com/
Hay muchas API potentes como parte de APILayer, y aunque algunas tienen más sentido en una aplicación web (como IpStack), muchas otras también tienen perfecto sentido en una aplicación cliente, como los servicios de procesamiento de archivos que ofrece FileStack ( https://www .filestack.com/ ) o la ingeniosa Api de verificación de correo electrónico de terceros ( https://apilayer.com/marketplace/email_verification-api ).
En mi demostración a continuación, me centraré en una API simple, posiblemente no la más poderosa: WeatherStack, que, como su nombre lo indica, puede brindar datos actuales, históricos y de pronóstico sobre el clima:
Uso del depurador REST de RAD Studio
Una vez que haya identificado la API REST que planea usar, la forma más fácil de comenzar a desarrollar una aplicación cliente es usar el Depurador REST, disponible como parte de la instalación de RAD Studio (y accesible desde el menú Herramientas) y también como una descarga gratuita por separado. para cualquiera ( https://www.embarcadero.com/free-tools/rest-debugger ).
El depurador ofrece la capacidad de configurar una API REST, guardar esa configuración para usarla en el futuro (o para compartirla con otro desarrollador) e importar la configuración en una aplicación Delphi o C++Builder.
En un caso simple, como el de WeatherStack, después de iniciar el depurador REST, primero debe configurar el punto final principal:
A continuación, debe establecer la configuración de parámetros adecuada, incluido el punto final específico (actual), el parámetro de consulta y la información de autenticación de access_key:
Los parámetros dependen del punto final y se enumeran en la documentación de la API. En este punto, puede usar el botón SendRequest para probar la API y verificar la respuesta en la parte inferior de la interfaz de usuario del depurador REST:
La estructura de datos resultante es relativamente compleja, pero podemos filtrar algunas de las tablas anidadas (como la ubicación visible arriba) en una estructura de tabla. Dado que probablemente estamos buscando los datos actuales, podemos usar ese elemento raíz JSON para obtener los datos en una estructura de tabla:
Creación de una demostración real en Delphi
Una vez que esté satisfecho con la configuración y los datos A (posiblemente incluidos los datos de la tabla), puede usar el botón Copiar componente del depurador REST para agilizar el desarrollo de una aplicación. De hecho, este botón captura la configuración de los componentes de la biblioteca del cliente REST y le permite pegarla en un formulario o módulo de datos en el IDE de RAD Studio.
En este caso, simplemente creé una aplicación FireMonkey simple con Delphi, agregué un módulo de datos y pegué la configuración de los componentes en él. Da como resultado el siguiente módulo de datos:
La configuración real de los componentes es la siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
object DataModule14: TDataModule14 object RESTClient1: TRESTClient BaseURL = 'http://api.weatherstack.com' end object RESTRequest1: TRESTRequest Client = RESTClient1 Params = < item Name = 'access_key' Value = 'xxxxxxxxxxxxxxxxx' end item Name = 'query' Value = 'Piacenza, Italy' end> Resource = 'current' Response = RESTResponse1 end object RESTResponse1: TRESTResponse RootElement = 'current' end object RESTResponseDataSetAdapter1: TRESTResponseDataSetAdapter Dataset = FDMemTable1 Response = RESTResponse1 TypesMode = JSONOnly end object FDMemTable1: TFDMemTable FetchOptions.AssignedValues = [evMode] FetchOptions.Mode = fmAll end end |
Como puede ver, el componente RESTClient tiene la configuración general del sitio, RESTRequest se refiere al punto final y sus parámetros, el componente opcional RESTResponse contiene los resultados y puede pasarlos a través del componente RESTResponseDataSetAdapter a una tabla en memoria, la FDMemTable componente.
En este punto, lo que necesita en el formulario principal es un botón para realizar la llamada y un cuadro de edición con la ubicación y un componente de visualización (he usado un cuadro de edición de solo lectura). En el controlador de eventos OnClick del botón, puede escribir un código como el siguiente:
1 2 3 4 5 6 |
procedure TForm13.BtnRefreshClick(Sender: TObject); begin DataModule14.RESTRequest1.Params[1].Value := EditLocation.Text; DataModule14.RESTRequest1.Execute(); EditCurrent.Text := DataModule14.FDMemTable1.FieldByName('temperature').AsString; end; |
Como alternativa, puede vincular la entrada y la salida a través de Visual LiveBindings, conectando la edición de entrada a los parámetros de solicitud y el campo específico de la tabla en memoria al control de salida. Para poder hacer esto, primero debe ejecutar la solicitud HTTP en tiempo de diseño, utilizando un comando específico del componente RESTRequest. Esto llena los metadatos de los componentes, incluida la tabla en memoria. Después de hacerlo, puede conectar la entrada y la salida en el diseñador de LiveBindings y residir el código ejecutado al presionar el botón para:
1 |
DataModule14.RESTRequest1.Execute(); |
Esta es la configuración del diseñador de LiveBindings:
Y finalmente, esta es la aplicación en tiempo de ejecución, en este caluroso día de verano:
Conclusión
Como ha visto, implementar un cliente para una API REST en Delphi es relativamente simple (ya demostré lo mismo en el pasado cubriendo una API diferente aquí ). Ahora, en el caso de una aplicación meteorológica, no hay muchas alternativas en comparación con acceder a datos en vivo desde un servicio web, mientras que en otros escenarios, usar una API sería una alternativa en comparación con incorporar la misma función en una parte de la biblioteca de la aplicación.
Planeamos mostrar algunas más de las API de APILayer en el blog de Embarcadero, así que manténgase conectado y siéntase libre de compartir sus ideas con nosotros.
.
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition