如何用Python通过Azure DevOps API获取工作项字段变更记录?
获取Azure DevOps工作项字段变更记录的API及Python实现
核心API端点
要获取工作项的字段变更历史,你需要调用工作项历史接口,端点格式如下:
GET https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{workItemId}/history?api-version=7.1-preview.3
organization:你的Azure DevOps组织名称project:目标项目名称workItemId:要查询的工作项IDapi-version:推荐用7.1-preview.3(当前较稳定的预览版,也可根据官方文档调整为稳定版)
响应数据解析
接口返回的JSON中,revisions数组包含了该工作项的所有版本记录,每个版本对象包含:
rev:版本号(从1开始递增)changedDate:版本变更时间changedBy:变更人信息fields:当前版本所有字段的取值
要提取特定字段(如Title、WorkItemType)的变更,需要对比相邻版本的字段值,找出发生变化的版本节点,记录变更前后的值、时间及操作人。
Python函数实现示例
下面是一个直接可用的Python函数,输入工作项ID和目标字段列表,返回结构化的JSON格式变更记录:
import requests import json def get_workitem_field_changes(organization, project, work_item_id, target_fields, pat): # 构建API请求URL url = f"https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{work_item_id}/history?api-version=7.1-preview.3" # 设置认证头(PAT作为Bearer令牌) headers = { "Authorization": f"Bearer {pat}", "Content-Type": "application/json" } # 发起请求 response = requests.get(url, headers=headers) response.raise_for_status() # 捕获请求错误 revisions = response.json()["revisions"] changes = [] # 遍历版本,对比相邻版本的字段变化 for i in range(1, len(revisions)): prev_rev = revisions[i-1] curr_rev = revisions[i] rev_num = curr_rev["rev"] change_date = curr_rev["changedDate"] changed_by = curr_rev["changedBy"]["displayName"] # 检查目标字段是否有变更 for field in target_fields: # 处理字段可能不存在于早期版本的情况 prev_value = prev_rev["fields"].get(f"System.{field}") if "fields" in prev_rev else None curr_value = curr_rev["fields"].get(f"System.{field}") if "fields" in curr_rev else None if prev_value != curr_value: changes.append({ "work_item_id": work_item_id, "field": field, "revision": rev_num, "change_date": change_date, "changed_by": changed_by, "old_value": prev_value, "new_value": curr_value }) # 返回JSON格式结果 return json.dumps(changes, indent=2, default=str)
使用说明
- 替换
organization、project、work_item_id为你的实际信息 target_fields传入要监控的字段名列表,比如["Title", "WorkItemType", "State"]pat是你的Azure DevOps个人访问令牌(需要有工作项读取权限)
返回的JSON可以直接用Python的csv模块解析为CSV文件,用于报表制作。
内容的提问来源于stack exchange,提问作者cristopheridlc
相关产品推荐
相关产品推荐

