Introdução às APIs REST
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Integre seu aplicativo ao Azure DevOps usando as APIs REST fornecidas neste artigo.
As APIs seguem um padrão comum, como o exemplo a seguir.
VERB https://{instance}/{collection}/{team-project}/_apis/{area}/{resource}?api-version={version}
Dica
À medida que as APIs evoluem, recomendamos que você inclua uma versão da API em cada solicitação. Essa prática pode ajudá-lo a evitar alterações inesperadas na API que podem ser interrompidas.
Azure DevOps Services
Para os Serviços de DevOps do Azure, é dev.azure.com/{organization}
e collection
é DefaultCollection
, portanto, instance
o padrão se parece com o exemplo a seguir.
VERB https://dev.azure.com/{organization}/_apis/{area}/{resource}?api-version={version}
O exemplo a seguir mostra como obter uma lista de projetos em uma organização.
curl -u {username}:{personalaccesstoken} https://dev.azure.com/{organization}/_apis/projects?api-version=2.0
Se você deseja fornecer o token de acesso pessoal (PAT) por meio de um cabeçalho HTTP, você deve primeiro convertê-lo em uma cadeia de caracteres Base64. O exemplo a seguir mostra como converter para Base64 usando C#. A cadeia de caracteres resultante pode então ser fornecida como um cabeçalho HTTP no formato.
Authorization: Basic BASE64PATSTRING
O exemplo a seguir mostra C# usando a classe HttpClient.
public static async void GetProjects()
{
try
{
var personalaccesstoken = "PAT_FROM_WEBSITE";
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", "", personalaccesstoken))));
using (HttpResponseMessage response = client.GetAsync(
"https://dev.azure.com/{organization}/_apis/projects").Result)
{
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
A maioria de nossas amostras usa PATs, pois eles são um exemplo compacto para autenticação com o serviço. No entanto, há vários mecanismos de autenticação disponíveis para os Serviços de DevOps do Azure, incluindo MSAL (Biblioteca de Autenticação da Microsoft), OAuth e Tokens de Sessão. Para obter mais informações, consulte Diretrizes de autenticação, para ajudá-lo a determinar qual é o mais adequado para o seu cenário.
Azure DevOps Server
Para o Servidor de DevOps do Azure, instance
é {server:port}
. A porta padrão para uma conexão não-SSL é 8080.
A coleção padrão é DefaultCollection
, mas você pode usar qualquer coleção.
Veja como obter uma lista de projetos do Servidor de DevOps do Azure usando a porta e a coleção padrão em SSL:
curl -u {username}:{personalaccesstoken} https://{server}/DefaultCollection/_apis/projects?api-version=2.0
Para obter a mesma lista em uma conexão não-SSL:
curl -u {username}:{personalaccesstoken} http://{server}:8080/DefaultCollection/_apis/projects?api-version=2.0
Esses exemplos usam PATs, que exigem que você crie um PAT.
Respostas
Você deve obter uma resposta como esta.
{
"value": [
{
"id": "eb6e4656-77fc-42a1-9181-4c6d8e9da5d1",
"name": "Fabrikam-Fiber-TFVC",
"url": "https: //dev.azure.com/fabrikam-fiber-inc/_apis/projects/eb6e4656-77fc-42a1-9181-4c6d8e9da5d1",
"description": "TeamFoundationVersionControlprojects",
"collection": {
"id": "d81542e4-cdfa-4333-b082-1ae2d6c3ad16",
"name": "DefaultCollection",
"url": "https: //dev.azure.com/fabrikam-fiber-inc/_apis/projectCollections/d81542e4-cdfa-4333-b082-1ae2d6c3ad16",
"collectionUrl": "https: //dev.azure.com/fabrikam-fiber-inc"
},
"defaultTeam": {
"id": "66df9be7-3586-467b-9c5f-425b29afedfd",
"name": "Fabrikam-Fiber-TFVCTeam",
"url": "https: //dev.azure.com/fabrikam-fiber-inc/_apis/projects/eb6e4656-77fc-42a1-9181-4c6d8e9da5d1/teams/66df9be7-3586-467b-9c5f-425b29afedfd"
}
},
{
"id": "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c",
"name": "Fabrikam-Fiber-Git",
"url": "https: //dev.azure.com/fabrikam-fiber-inc/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c",
"description": "Gitprojects",
"collection": {
"id": "d81542e4-cdfa-4333-b082-1ae2d6c3ad16",
"name": "DefaultCollection",
"url": "https: //dev.azure.com/fabrikam-fiber-inc/_apis/projectCollections/d81542e4-cdfa-4333-b082-1ae2d6c3ad16",
"collectionUrl": "https: //dev.azure.com/fabrikam-fiber-inc"
},
"defaultTeam": {
"id": "8bd35c5e-30bb-4834-a0c4-d576ce1b8df7",
"name": "Fabrikam-Fiber-GitTeam",
"url": "https: //dev.azure.com/fabrikam-fiber-inc/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c/teams/8bd35c5e-30bb-4834-a0c4-d576ce1b8df7"
}
}
],
"count": 2
}
A resposta é JSON, que geralmente é o que você obtém das APIs REST, embora haja algumas exceções, como blobs Git.
Agora, você pode examinar as áreas específicas da API, como rastreamento de item de trabalho ou Git, e acessar os recursos necessários. Continue lendo para saber mais sobre os padrões gerais que são usados nessas APIs.
Verbos HTTP
Verbo | Usado para... |
---|---|
GET | Obter um recurso ou uma lista de recursos |
POSTAR | Criar um recurso, Obter uma lista de recursos usando uma consulta mais avançada |
PUT | Criar um recurso se ele não existir ou, se existir, atualizá-lo |
PATCH | Atualizar um recurso |
DELETE | Excluir um recurso |
Cabeçalhos de solicitação e conteúdo de solicitação
Quando você fornece o corpo da solicitação (geralmente com os verbos POST, PUT e PATCH), inclua cabeçalhos de solicitação que descrevam o corpo. Por exemplo,
POST https://dev.azure.com/fabrikam-fiber-inc/_apis/build-release/requests
Content-Type: application/json
{
"definition": {
"id": 3
},
"reason": "Manual",
"priority": "Normal"
}
Substituição do método HTTP
Alguns proxies da Web podem suportar apenas os verbos HTTP GET e POST, mas não verbos HTTP mais modernos, como PATCH e DELETE.
Se suas chamadas passarem por um desses proxies, você poderá enviar o verbo real usando um método POST, com um cabeçalho para substituir o método.
Por exemplo, talvez você queira atualizar um item de trabalho (PATCH _apis/wit/workitems/3
), mas talvez precise passar por um proxy que permita apenas GET ou POST.
Você pode passar o verbo apropriado (PATCH neste caso) como um parâmetro de cabeçalho de solicitação HTTP e usar POST como o método HTTP real.
POST https://dev.azure.com/fabrikam-fiber-inc/_apis/wit/workitems/3
X-HTTP-Method-Override: PATCH
{
(PATCH request body)
}
Códigos de resposta
Resposta | Observações |
---|---|
200 | Sucesso, e há um corpo de resposta. |
201 | Sucesso, ao criar recursos. Algumas APIs retornam 200 ao criar um recurso com êxito. Olhe para os documentos da API que você está usando para ter certeza. |
204 | Sucesso, e não há corpo de resposta. Por exemplo, você obtém essa resposta quando exclui um recurso. |
400 | Os parâmetros na URL ou no corpo da solicitação não são válidos. |
401 | Falha na autenticação. Muitas vezes, essa resposta é devido a um cabeçalho de autorização ausente ou malformado. |
403 | O usuário autenticado não tem permissão para fazer a operação. |
404 | O recurso não existe ou o usuário autenticado não tem permissão para ver que ele existe. |
409 | Há um conflito entre a solicitação e o estado dos dados no servidor. Por exemplo, se você tentar enviar uma solicitação pull e já houver uma solicitação pull para as confirmações, o código de resposta será 409. |
Compartilhamento de recursos entre origens (CORS)
Os Serviços de DevOps do Azure dão suporte ao CORS, que permite que o código JavaScript servido de um domínio diferente de dev.azure.com/*
fazer solicitações Ajax para APIs REST dos Serviços de DevOps do Azure. Cada solicitação deve fornecer credenciais (PATs e tokens de acesso OAuth são opções com suporte). Exemplo:
$( document ).ready(function() {
$.ajax({
url: 'https://dev.azure.com/fabrikam/_apis/projects?api-version=1.0',
dataType: 'json',
headers: {
'Authorization': 'Basic ' + btoa("" + ":" + myPatToken)
}
}).done(function( results ) {
console.log( results.value[0].id + " " + results.value[0].name );
});
});
(substitua myPatToken
por um token de acesso pessoal)
Controle de versão
As APIs REST do Azure DevOps são versionadas para garantir que os aplicativos e serviços continuem a funcionar à medida que as APIs evoluem.
Diretrizes
- Especifique a versão da API com cada solicitação (obrigatório).
- Formate as versões da API da seguinte maneira: {major}. {menor}-{estágio}. {resource-version}. Por exemplo,
1.0
,1.1
,1.2-preview
,2.0
. - Especifique uma revisão específica da API quando ela estiver em visualização, usando o seguinte formato de versão:
1.0-preview.1
,1.0-preview.2
. Depois que uma API é lançada (1.0, por exemplo), sua versão prévia (1.0-preview) é preterida e pode ser desativada após 12 semanas. - Atualize para a versão lançada da API. Depois que uma API de visualização é desativada, as solicitações que especificam
-preview
a versão são rejeitadas.
Uso
Especifique a versão da API no cabeçalho da solicitação HTTP ou como um parâmetro de consulta de URL.
Cabeçalho de solicitação HTTP:
Accept: application/json;api-version=1.0
Parâmetro de consulta:
GET https://dev.azure.com/{organization}/_apis/{area}/{resource}?api-version=1.0
Versões suportadas
Para obter informações sobre versões com suporte, consulte Controle de versão da API REST, Versões com suporte.