在linux中从curl响应中检查json字段。

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

我正在gitlab-ci文件中写一个脚本,我使用的服务器是Linux来运行管道。

现在我想做两个API调用,而第二个调用依赖于第一个调用。

比如

URL= you can take any HTTPS endpoint (i guess it really doesn't matter)

jsonResponse=$(curl -d $requestJson -X POST $FIRST_URL)

echo $jsonResponse

[{"result":"Success"}]

基于结果字段(successfailure),我想用curl进行另一个API调用。

if response[0].result=success then "curl -d $requestJson -X POST $SECOND_URL" else exit 1

请注意,响应将以数组的形式存在,我想进行两次休眠API调用,而第二次休眠调用依赖于第1次响应,例如jsonResponse=$(curl -d $requestJson -X POST $URL) echo $jsonResponse

linux curl alpine
1个回答
1
投票

你可以做的是将第一次API调用的输出保存到一个文件中(api1-output.json),然后将它传递给下一个对应的作业,在那里你可以读取输出并根据它的响应采取行动。

在你的例子中 .gitlab-ci.yml。 文件。

api1_execution:
   image: your_image
   script:
      - curl -XGET https://my-api1-endpoint.com/api/getSomething > scripts/api1-output.json
   artifacts:
      paths:
         - scripts/api1-output.json


api2_execution:
   image: your_image
   script:
      - API1_OUTPUT= $(cat scripts/api1-output.json)
      - // do whatherever you want with API1_OUTPUT
      - // fire 2nd API call

对于解析和读取JSON输出,我强烈建议你使用名为 jQ

上面的例子可以为你提供一个想法,从我的角度来看,它是如何做到的。


-1
投票

我想做两个休眠API调用,第二个休眠调用依赖于第一个响应。

请从协议的角度进行推理:所以 HTTPS (或 超文本传输协议)和 REST. 阅读更多关于他们两个的信息。

你可以使用一些现有的 JSON 库(如 jansson 在C区,或 符号 在C++中),并将它们与一些HTTP客户端库(如 libcurl)和HTTP服务器库(如 libonion)和HTTP服务器库(如).

你可能会对现有的C++框架感兴趣,如 QtPOCO.

你应该看看最近的语言实现,如 去吧锈蚀OcamlSBCLNode.JS. 它们提供了有用的库(与HTTP和REST有关,包括客户端和服务器端)。

你可以考虑使用脚本语言,比如 蟒蛇诡计路亚Perl红宝石等......。他们也有相关的库来满足你的需求。

阅读你要使用的编程语言实现和库的文档。

我倾向于认为 GNU bash 并不是满足你需求的最佳选择(至少也可以考虑 GNU 瞠目结舌).

也可以看一下这两个 githubgitlab 对于 开源 与您的需求相关的实现。一旦这些都被指定了(也许使用 EBNF 符号来表示你要实现的消息;也请阅读关于 SOAPJSONRPC)纸上谈兵,实现起来相当简单。

请务必阅读 高级Linux编程系统调用(2)插座(7).

如何正确验证该字段

首先,在纸上明确什么是有效字段。

同时,写出几个有效字段和无效字段的例子。然后考虑使用 regex(7). 还 研究 启发 的源码 现有 与您的需求类似的开源软件.

另见 这个.

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