【问题标题】:loop to pass bulk values into python api request循环将批量值传递给python api请求
【发布时间】:2021-03-25 16:13:20
【问题描述】:

我有一个用 Python 构建的 API,它输出数据并接受输入参数“ID”,并输出一组字段。该参数不允许传递批量值,为了解决这个问题,我尝试创建一个循环来对每个 Id 进行一次调用。以下是我尝试过的示例:

    ID = '19727795,19485344'
#15341668,
fields = 'userID, agentID, internalID'
 
#add all necessary headers
header_param = {'Authorization': 'bearer ' + accessToken,'content-Type': 'application/x-www-form-urlencoded','Accept': 'application/json, text/javascript, */*'}

for x in ID:
    response = requests.get(Baseuri + '/services/v17.0/agents/' + x + '?fields=' + fields , headers = header_param) 
 

即使这个循环也返回错误'404 Invalid ID'

将 args 列表传递给 ID 参数的方法是什么?我必须每天至少运行一次此代码,并且需要一种方法来传递多个值。

【问题讨论】:

  • 现在ID 是一个字符串,遍历字符串只会返回单个字符。要么做ID = ['first_id', 'second_id', ...]要么做for x in ID.split(',')
  • @Lagerbaer using ID = ['first_id', 'second_id'] 不起作用,因为它显示 TypeError: can only concatenate str (not "list") to str.在 ID.split(',') 中使用 for x 只会拉回最后一个传递的 ID

标签: python python-3.x api loops


【解决方案1】:

如果它不允许批量 IDS 并且它是您的 API,我看到您有两个选择。您要么 A)允许它在服务器端,要么 B)这样做:

fields = 'userID, agentID, internalID'
field_list = fields.split(",")

for field in field_list:
    pass

真的,它只是归结为如果您希望您的客户端代码更简单,或者您的服务器端更简单,因为它或多或少是相同的过程,而不管它在哪里结束。另一方面,f-strings 使用起来更高效、更干净(主观):

response = requests.get(Baseuri + '/services/v17.0/agents/' + x + '?fields=' + fields , headers = header_param)

会变成:

response = requests.get(f'{BASE_URI}/services/v17.0/agents/{x}?fields={fields}', headers = header_param)  

【讨论】:

  • 不应该是需要拆分的id字段吗?拆分字段列表的目的是什么?
  • 真正的区别是什么。您需要做的就是相应地更改值,并且两个字符串具有完全相同的格式。
  • 重点是你使用的是.split()字符串方法
  • 上述工作,有一个调整 - 字典。响应的输出必须附加到单个字典中,因为 for 循环会覆盖先前的值
猜你喜欢
  • 2018-03-01
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2014-02-28
  • 1970-01-01
相关资源
最近更新 更多