【问题标题】:How to store GET requests from REST API calls on Azure SQL or Azure CosmosDB如何在 Azure SQL 或 Azure CosmosDB 上存储来自 REST API 调用的 GET 请求
【发布时间】:2020-08-18 09:18:56
【问题描述】:

我有一些连接到网络的温度记录器。 我可以在 Postman 应用程序中编写 GET 请求,以接收 JSON 格式的最新温度数据。 我的目标是自动进行 API 调用并将这些值存储在 Azure 数据库(SQL 或 CosmosDB)中。

非常感谢任何有关如何解决此问题的建议!

最好的问候, 马可

【问题讨论】:

  • 这有点太开放了,因为这可以通过多种工具组合来实现。您是否正在寻找比教程更具体的内容?
  • 您是否需要有关可用于实现您所寻找的服务的指导?或者您需要帮助来整理代码?

标签: sql azure api rest azure-cosmosdb


【解决方案1】:

最新

如果您有兴趣,可以了解一下 ADF。

Copy data from an HTTP endpoint by using Azure Data Factory

私人

一开始想在sql server中执行Http请求,返回数据再处理,可以直接存储。并让定时任务定时执行。

所有脚本在本地测试成功,但在Azure数据库中执行时,出现错误Could not find stored procedure'sp_OACreate

我试图找出原因并找到答案。

所以,你必须创建一个新程序(webjob或其他)来实现你的功能。你可以通过HttpClient(在C#中)获取数据,并通过CURD存储数据。

应该没有其他无故障的方法了。

另外,据我了解,cosmosdb不支持类似的操作。

我的尝试步骤:

  1. 在本地sql server中创建一个函数。

     -- Enable Ole Automation
     sp_configure 'show advanced options', 1;
     GO
     RECONFIGURE;
     GO
     sp_configure 'Ole Automation Procedures', 1;
     GO
     RECONFIGURE;
     GO
     sp_configure 'show advanced options', 0;
     GO
     RECONFIGURE;
     GO
    
     /****** Object:  UserDefinedFunction [dbo].[fn_GetBlockFromAPI]    Script Date: 8/21/2020 12:07:39 PM ******/
     SET ANSI_NULLS ON
     GO
     SET QUOTED_IDENTIFIER ON
     GO
     CREATE FUNCTION [dbo].[fn_SendHttpRequest]
     (@testurl NVARCHAR(20))
     RETURNS NVARCHAR(MAX)
     AS
     BEGIN
         DECLARE @url    VARCHAR(255);
         DECLARE @obj    INT;
         DECLARE @hr     INT;
         DECLARE @msg    VARCHAR(8000);  
         DECLARE @json   NVARCHAR(4000); --Cannot use MAX with CLR stored procedures
         SET @url = 'http://www.tianqiapi.com/api?version=v6&appid=16879135&appsecret=ucyKFK6p';--@testurl
         EXEC @hr = sp_OACreate 'WinHttp.WinHttpRequest.5.1', @obj OUT  -- Creates an instance of an OLE object
         IF @hr <> 0 BEGIN SET @Msg = 'sp_OACreate WinHttp.WinHttpRequest.5.1 failed. Cannot connect to Blockchain.info' GOTO Error END
         EXEC @hr = sp_OAMethod @obj, 'Open', NULL, 'GET', @Url, false  -- Calls a method of an OLE object.
         IF @hr <> 0 BEGIN SET @msg = 'sp_OAMethod Open failed. Cannot connect to Blockchain.info' GOTO Error END
        EXEC @hr = sp_OAMethod @obj, 'SetRequestHeader', NULL, 'Content-Type', 'multipart/form-data'
         IF @hr <> 0 BEGIN SET @msg = 'sp_OAMethod SetRequestHeader failed. Cannot connect to Blockchain.info' GOTO Error END
         EXEC @hr = sp_OAMethod @obj, SEND, NULL, ''
         IF @hr <> 0 BEGIN SET @msg = 'sp_OAMethod Send failed. Cannot connect to Blockchain.info' GOTO Error END
         EXEC @hr = sp_OAGetProperty @Obj, 'ResponseText', @json OUTPUT
         IF @hr <> 0 EXEC sp_OAGetErrorInfo @Obj
         EXEC @hr = sp_OADestroy @obj
         RETURN @json
         Error:
         EXEC @hr = sp_OADestroy @obj
         RETURN @msg
     END
    
  2. 然后就可以查询SELECT [dbo].[fn_SendHttpRequest]('')了。

获取数据后,您可以插入到您的数据库中。您也可以使用FOR JSON AUTO 来处理您的数据。 但在azure sql 数据库中不支持

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 2018-06-20
    • 2022-11-06
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 2021-11-06
    相关资源
    最近更新 更多