【问题标题】:How to loop API calls through sets of two variables如何通过两个变量集循环 API 调用
【发布时间】:2020-04-30 16:50:57
【问题描述】:

我有几百条记录需要通过 API 更新。更新是针对同一个字段的,但每条记录不一定会收到相同的值。这意味着我需要两组变量,一组用于记录 ID,另一组用于输入的唯一值。我在想我可以用 cURL 或 bash 来完成这项工作,但还没有想出一个工作脚本。我得到的最接近的是以下变量 $i 用于四个记录 ID,变量 $j 用于每个相应记录将更新的值(新日期)...

for i in "50446" "50513" "50526" "50546" ; do
for j in "2019-08-15 07:00:00" "2019-08-26 07:00:00" "2019-08-20 07:00:00" "2019-08-22 07:00:00" ; do

( curl -H "Accept: application/xml" -H "X-API-KEY:***************" -d "<invoice-header><payment-date>$j.000</payment-date></invoice-header>" -X PUT "https://dummy-environment.com/api/invoices/$i" ) &&continue

done
done

但是,使用上面的脚本,API 循环遍历每个记录 ID,并使用变量 $j 中指定的第四个(最后一个)日期值更新所有记录 ID。它没有从 $j 中提取每个相应的值。有没有人做过这样的事情?有什么建议吗?

【问题讨论】:

  • 在内部循环中使用echo "$i --- $j" 测试了您的代码,但我无法重现您的问题。
  • 你正在做$i$j 的所有组合,这是你真正想要的吗?还是您希望第一个 $i 与第一个 $j 一起使用,第二个 $i 与第二个 $j 一起使用,依此类推?
  • @Barmar 我的意图是让第一个 $i 与第一个 $j 一起使用,第二个 $i 与第二个 $j 一起使用,等等。但我找到了一种通过 Rails 控制台执行此更新的方法(应用程序是用 Ruby 编写的)所以我的问题得到了解决。谢谢。
  • 我清楚地知道了这一点,因为我发布了一个答案,说明了如何做到这一点。

标签: arrays bash api variables curl


【解决方案1】:

您正在使用 ij 的每个组合进行 API 调用。如果你只是想要每个列表的对应元素,将它们放入数组中,然后循环遍历数组索引。

ids=("50446" "50513" "50526" "50546")
dates=("2019-08-15 07:00:00" "2019-08-26 07:00:00" "2019-08-20 07:00:00" "2019-08-22 07:00:00")
for ((idx = 0; idx < ${#ids[@]}; idx++))
do
    i=${ids[idx]}
    j=${dates[idx]}
    curl -H "Accept: application/xml" -H "X-API-KEY:***************" -d "<invoice-header><payment-date>$j.000</payment-date></invoice-header>" -X PUT "https://dummy-environment.com/api/invoices/$i"
done

我不确定您在循环中使用 &amp;&amp; continue 的目的是什么。由于循环自动继续,因此将其添加为条件语句毫无意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2014-03-29
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多