如何通过Request Tracker REST API 2.0更新工单Owner字段?
更新Request Tracker REST API 2.0工单Owner字段的正确方式
你遇到的问题很常见——RT的REST2 API对于关联字段(比如Owner这类指向用户的字段)的更新逻辑和普通顶层字段不一样,直接在工单根对象里传{ "Owner": { "id": "root" } }是行不通的。下面是两种推荐的实现方式:
方法1:直接更新Owner关联端点
REST2为每个关联字段提供了单独的资源端点,你可以直接向工单的Owner端点发送PUT请求来更新:
curl -X PUT -H "Content-Type: application/json" -d '{ "id": "root" }' -H 'Authorization: token XXX_Token_XXX' 'http://XXX_RT_URL_XXX/REST/2.0/ticket/6/Owner'
这个方法的逻辑是直接操作工单的Owner关联资源,请求体里只需要传入目标用户的id(或者用户名,比如"name": "root"也可以)。
方法2:在工单更新请求中使用关联引用格式
如果你想在一次请求中同时更新工单的多个字段(包括Owner),需要用REST2的关联引用格式,通过_url字段指向目标用户的资源:
curl -X PUT -H "Content-Type: application/json" -d '{ "Subject": "更新后的工单标题", "Owner": { "_url": "/REST/2.0/user/root" } }' -H 'Authorization: token XXX_Token_XXX' 'http://XXX_RT_URL_XXX/REST/2.0/ticket/6'
或者也可以用用户的数字ID来引用:
curl -X PUT -H "Content-Type: application/json" -d '{ "Owner": { "_url": "/REST/2.0/user/1" } }' -H 'Authorization: token XXX_Token_XXX' 'http://XXX_RT_URL_XXX/REST/2.0/ticket/6'
这里的核心是:关联字段不能直接传{ "id": "root" },必须通过_url指向对应的用户资源端点,REST2才能正确识别并处理关联关系。
另外需要注意几个细节:
- 确保你的API令牌拥有修改工单Owner的权限
- 如果用用户名匹配,要保证该用户名在RT系统中唯一,避免出现匹配错误
- 可以先通过
GET /REST/2.0/user/root请求确认用户资源的端点是否正确,避免拼写失误
内容的提问来源于stack exchange,提问作者Arko
相关产品推荐
相关产品推荐

