我正在尝试通过Devops REST API在我们的Azure Devops实例中创建一个新团队。这是通过R完成的,其中POST请求使用“ httr”包,toJSON函数使用“ jsonlite”包。
我一直在利用Microsoft(https://docs.microsoft.com/en-us/rest/api/azure/devops/core/teams/create?view=azure-devops-rest-5.1)上的文档来正确构造请求,但始终收到400错误(错误请求)。
我是该网上论坛的管理员,因此拥有创建团队的权限,并且该网址正确无误,因为我可以通过GET请求返回数据。
对于body参数,我正在使用以下代码;
args <- list(name = "my new team")
body <- toJSON(args, auto_unbox = TRUE)
在控制台上打印“ body”会返回
{"name":"my new team"}
看起来与Microsoft文档中的JSON请求正文一致。
POST请求的代码如下;
create.task <- POST(paste0("https://dev.azure.com/",org.id,"/_apis/projects/",
project.id,"/teams?api-version=5.1"),
encode = "json",
authenticate(username, token, type = "basic"),
body = body,
verbose())
这将返回以下错误消息,而不是在Devops中创建新团队。
"HTTP/1.1 400 Bad Request
<- Cache-Control: no-cache
<- Pragma: no-cache
<- Content-Length: 446
<- Content-Type: application/json; charset=utf-8
<- Expires: -1"
不幸的是,这是无法复制的,但是我想看看我是否犯了一个明显的错误。
谢谢。
答案 0 :(得分:3)
答案 1 :(得分:2)
感谢休·林提出的通过邮递员的建议。由此,我得到了我的授权令牌,并设法使我的请求生效。然后,我将代码段导出到cURL中,并使用https://curl.trillworks.com/#r将curl命令转换为R httr。
与我的早期方法的另一个区别是,我使用add_headers设置了Authorization,Host和Content Type,并在查询中设置了api版本。
下面的代码是我使用的;
require(httr)
headers = c(
`Authorization` = 'Basic XXXXXXXXXXXXXXXX=',
`Content-Type` = 'application/json',
`Host` = 'dev.azure.com'
)
params = list(
`api-version` = '5.1'
)
data <- toJSON(list(name = "My New Team"), auto_unbox = TRUE, pretty = TRUE)
res <- httr::POST(url = 'https://dev.azure.com/{organization}/_apis/projects/{projectId}/teams',
httr::add_headers(.headers=headers),
query = params,
body = data)
这成功创建了新团队。
> status_code(res)
[1] 201