SQL Server - 使用虚拟CSV调用REST API

问题描述 投票:1回答:1

我有下面的代码向API发出请求并且工作正常,使用JSON content-type到另一个端点。

DECLARE @Object AS int;
DECLARE @ResponSEText AS Varchar(8000);
DECLARE @Token AS Varchar(8000);
DECLARE @xmltest AS Varchar(8000);
DECLARE @hResult AS int
DECLARE @source varchar(255), @desc varchar(255) 
DECLARE @LocationId varchar(25);

DECLARE @Body AS varchar(8000) = '{
  "UserName": "test.integration12",
  "Password": "Urgent123"
}'

--EXEC sp_OACREATE 'MSXML2.XMLHTTP', @Object OUT;
EXEC sp_OACREATE 'MSXML2.ServerXMLHttp', @Object OUT;
EXEC sp_OAMethod @Object, 'open', NULL, 'POST', 
'https://urgentcargus.azure-api.net/api/LoginUser', 'false'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Content-Type', 'application/json'

DECLARE @len int
SET @len = len(@body)
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Ocp-Apim-Subscription-Key','4f82f9d067914287979884f920d86ffb'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Ocp-Apim-Trace:true'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Content-Length', @len
EXEC sp_OAMethod @Object, 'SETRequestBody', null, 'Body', @body
EXEC sp_OAMethod @Object, 'sEND', null, @body
EXEC sp_OAMethod @Object, 'responSEText', @ResponSEText OUTPUT

我想调整上面的代码,以便使用不同的内容类型将参数的值(如虚拟csv文件而不是XMLJSON协议)以适当的格式发送到另一个端点,我无法弄清楚如何做这个:

DECLARE @Object AS int;
DECLARE @ResponSEText AS Varchar(8000);
DECLARE @Token AS Varchar(8000);
DECLARE @xmltest AS Varchar(8000);
DECLARE @hResult AS int
DECLARE @source varchar(255), @desc varchar(255) 
DECLARE @LocationId varchar(25);

DECLARE @Body AS varchar(8000) = -- here should go the parameters which are username, clientid, password and file (where file has to be the virtual CSV file with the columns and rows separated by "|"


EXEC sp_OACREATE 'MSXML2.ServerXMLHttp', @Object OUT;
EXEC sp_OAMethod @Object, 'open', NULL, 'POST', 
'https://www.selfawb.ro/import_awb_integrat.php', 'false'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Content-Type', 'text/xml'

EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Ocp-Apim-Trace:true'
EXEC sp_OAMethod @Object, 'SETRequestBody', null, 'Body', @body
EXEC sp_OAMethod @Object, 'sEND', null, @body
EXEC sp_OAMethod @Object, 'responSEText', @ResponSEText OUTPUT

我问了API的老板,他们向我提供了一个例子,如下面的打印屏幕所示:

Example

有人能给我一个提示还是一只手?谢谢

sql-server api
1个回答
0
投票

如果要发送虚拟文件,例如您在内存中生成的文件然后作为POST的一部分作为附件发送,那么您只需要将csv文本作为帖子的一部分包含为带文件名的附件。尝试使用PostMan使用实际的csv文件进行设置,并分析POST以查看如何格式化要通过线路序列化的csv文本作为csv文件附件。

否则,如果您使用的是SQL 2016或更高版本,则可以使用STRING_SPLIT解析csv文本。希望这可以帮助。

DECLARE @CsvParams NVARCHAR(256) = 
      'UserName,test.integration12,'
    + 'Password,Urgent123'

SELECT value FROM STRING_SPLIT(@CsvParams, ',');

上面的代码生成一个包含分隔值的表:

enter image description here

有关STRING_SPLIT的更多信息,请访问:STRING_SPLIT (Transact-SQL)

© www.soinside.com 2019 - 2024. All rights reserved.