如何更优地在API调用URL中添加可选过滤条件
优化API URL可选参数拼接的简便方法
当需要处理多个可选过滤条件的API URL拼接时,不用逐个枚举参数组合,有两种更简洁的实现方式:
方法一:利用字典过滤+URL编码工具
借助Python标准库urllib.parse.urlencode自动处理参数拼接,只需把所有参数存入字典,过滤掉空值即可:
from urllib.parse import urlencode def get_cards(board_id, lane_id=None, workflow_id=None): """ Get all the cards by the given conditions """ base_url = 'https://xxxx.kanbanize.com/api/v2/cards' params = { 'board_ids': board_id, 'lane_ids': lane_id, 'workflow_ids': workflow_id } # 过滤值为None的可选参数 valid_params = {key: value for key, value in params.items() if value is not None} # 拼接基础URL与查询参数 return f"{base_url}?{urlencode(valid_params)}"
这种方式扩展性极强——后续新增可选参数时,只需在params字典中添加对应的键值对,无需修改其他逻辑。
方法二:手动拼接参数列表
如果不想引入标准库,也可以通过列表收集有效参数再拼接:
def get_cards(board_id, lane_id=None, workflow_id=None): """ Get all the cards by the given conditions """ # 先拼接必填参数 url_parts = [f'https://xxxx.kanbanize.com/api/v2/cards?board_ids={board_id}'] # 收集非空的可选参数 if lane_id is not None: url_parts.append(f'lane_ids={lane_id}') if workflow_id is not None: url_parts.append(f'workflow_ids={workflow_id}') # 用&连接所有参数部分 return '&'.join(url_parts)
这种方式逻辑直观,适合参数数量不多的场景,新增参数时只需添加一个if判断即可。
两种方法都能避免大量冗余的条件分支,大幅降低代码维护成本。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

