【问题标题】:Check json field from the curl response in linux从 linux 中的 curl 响应中检查 json 字段
【发布时间】:2020-09-27 00:24:45
【问题描述】:

我正在 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"}]

根据结果字段(成功/失败),我想使用 curl 进行另一个 API 调用。像下面的东西

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

请注意,响应将在数组中。

【问题讨论】:

    标签: linux gitlab-ci alpine


    【解决方案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 的工具

    上面的例子可以作为一个想法,从我的角度来看它是如何完成的。

    【讨论】:

    • jQ 工具有助于提取详细信息,并且有效,谢谢。
    【解决方案2】:

    我想进行两次休息 API 调用,第二次休息调用取决于第一次响应

    请根据协议进行推理:HTTPS(或HTTP)和REST。阅读更多关于它们的信息。

    您可以使用一些现有的JSON 库(例如C 中的jansson,或C++ 中的jsoncpp)并将它们与一些HTTP 客户端库(例如libcurl)和/或HTTP 服务器库(例如@ 987654328@).

    您可能对现有的 C++ 框架感兴趣,例如 QtPOCO

    您应该查看最近的语言实现,例如GoRustOcamlSBCLNode.JS。它们提供有用的库(与 HTTP 和 REST 相关,包括客户端和服务器端)。

    您可以考虑使用脚本语言,如PythonGuileLuaPerlRuby 等......他们也有满足您需求的相关库。

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

    我倾向于认为 GNU bash 不是满足您需求的最佳选择(至少还要考虑 GNU gawk)。

    同时查看githubgitlab 以获得与您的需求相关的open source 实现。一旦在纸上指定了这些(可能使用EBNF 表示您想要实现的消息;另请阅读SOAPJSONRPC),实现相当容易。

    请务必阅读 Advanced Linux Programmingsyscalls(2)sockets(7)

    验证字段的正确方法

    首先,在纸上指定哪些是有效字段。

    另外,写几个有效字段和无效字段的例子。然后考虑使用regex(7)。另外研究以获得灵感现有与您的需求相似的开源软件的源代码

    另见this

    【讨论】:

    • 更新了我的问题。如果你明白我想说什么,请告诉我
    • 我上面的回答仍然有效并回答了你的问题
    • @BasileStarynkevitch 我也很困惑你的回答与 Anand Kumar 提出的问题有什么关系?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多