Usar puntos de conexión de RESTful para importar datos a Azure SQL Database

Completado

Azure SQL Database permite importar datos mediante un punto de conexión REST externo mediante el procedimiento almacenado por el sistema sp_invoke_external_rest_endpoint. Puede llamar a cualquier punto de conexión REST HTTP directamente desde las consultas SQL, lo que permite integrarse con una amplia gama de servicios, como Azure Functions, Azure Logic Apps y Azure App Service.

Además, si desea invocar un servicio REST que no está dentro de la lista de permitidos, puede usar Azure API Management para exponer de forma segura el servicio deseado y hacer que esté disponible para sp_invoke_external_rest_endpoint.

Exploración del uso de la API

Vamos a explorar algunos de los escenarios y casos de uso clave en los que esta funcionalidad puede ser beneficiosa.

  • Procesamiento de datos con Azure Functions: Puede usar sp_invoke_external_rest_endpoint para llamar a una función de Azure que procese los datos. Por ejemplo, puede enviar un lote de datos a una función de Azure para realizar cálculos o transformaciones complejos y luego almacenar los resultados de nuevo en la base de datos.

  • Integración con Cognitive Services: Puede llamar a las API de Cognitive Services para realizar tareas como el análisis de opiniones, el reconocimiento de imágenes o la traducción de idioma. Por ejemplo, puede enviar datos de texto a la API de Text Analytics para analizar los comentarios de los clientes y almacenar las puntuaciones de opinión en la base de datos.

  • Flujos de trabajo controlados por eventos: Use sp_invoke_external_rest_endpoint para desencadenar flujos de trabajo en Logic Apps o Power Automate. Esto puede ser útil para automatizar los procesos empresariales, como enviar notificaciones o actualizar registros en otros sistemas en función de los cambios en la base de datos.

  • Enriquecimiento de datos: Enriquecer los datos mediante una llamada a api externas. Por ejemplo, podría llamar a una API de REST para obtener información adicional sobre un producto o cliente y luego almacenar los datos en la base de datos.

  • API Management: Use sp_invoke_external_rest_endpoint para interactuar con las API administradas por Azure API Management. Esto le permite usar las API existentes para varias funcionalidades sin tener que escribir código de integración complejo.

Implementar llamadas de API seguras

A menudo, los puntos de conexión REST requieren autenticación, que se puede realizar a través de pares clave-valor en la cadena de consulta o encabezados HTTP. Puede almacenar estos datos de forma segura mediante DATABASE SCOPED CREDENTIALS con el parámetro IDENTITY que especifica cómo pasar los datos de autenticación. El IDENTITY parámetro admite cuatro opciones: HTTPEndpointHeaders, HTTPEndpointQueryString, Managed Identity y Firma de acceso compartido (SAS).

La CREDENCIAL DE ÁMBITO DE BASE DE DATOS creada se puede usar a través del parámetro @credential del procedimiento almacenado sp_invoke_external_rest_endpoint. La información de autenticación debe proporcionarse a través del parámetro SECRET en un formato JSON plano.

CREATE DATABASE SCOPED CREDENTIAL [https://.azurewebsites.net/api/]
WITH IDENTITY = 'HTTPEndpointHeaders', SECRET = '{"x-functions-key":"<your-function-key>"}';

Invocación de un punto de conexión REST

Consideremos un escenario en el que desea importar datos desde una API de REST que proporcione información meteorológica. Ya tiene una tabla de WeatherData en Azure SQL Database con columnas de City, Temperature, Condition y Timestamp.

Use el procedimiento almacenado sp_invoke_external_rest_endpoint para llamar a la API de REST e insertar los datos en la tabla:

DECLARE @response NVARCHAR(MAX);
EXEC sp_invoke_external_rest_endpoint 
    @method = 'GET',
    @url = 'https://api.weather.com/v3/wx/conditions/current?apiKey=your_api_key&format=json',
    @response = @response OUTPUT;

INSERT INTO WeatherData (City, Temperature, Condition, Timestamp)
SELECT 
    JSON_VALUE(@response, '$.location.city'),
    JSON_VALUE(@response, '$.temperature'),
    JSON_VALUE(@response, '$.weatherCondition'),
    GETDATE();

Al considerar el uso de puntos de conexión REST, asegúrese de que los puntos de conexión a los que llama son seguros y que los datos confidenciales se controlan correctamente. Tenga en cuenta las implicaciones de rendimiento de las llamadas API frecuentes, especialmente cuando se trabaja con grandes conjuntos de datos o actualizaciones de alta frecuencia. Además, implemente el control de errores para administrar posibles problemas con las llamadas API, como tiempos de espera o respuestas no válidas.