Introducción a las API REST

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Integre la aplicación con Azure DevOps mediante las API REST proporcionadas en este artículo.

Las API siguen un patrón común, como en el ejemplo siguiente.

VERB https://{instance}/{collection}/{team-project}/_apis/{area}/{resource}?api-version={version}

Sugerencia

A medida que evolucionan las API, se recomienda incluir una versión de API en cada solicitud. Esta práctica puede ayudarle a evitar cambios inesperados en la API que podrían interrumpirse.

Azure DevOps Services

Para Azure DevOps Services, instance es dev.azure.com/{organization} y collection es DefaultCollection, por lo que el patrón es similar al ejemplo siguiente.

VERB https://dev.azure.com/{organization}/_apis/{area}/{resource}?api-version={version}

En el ejemplo siguiente se muestra cómo obtener una lista de proyectos de una organización.

curl -u {username}:{personalaccesstoken} https://dev.azure.com/{organization}/_apis/projects?api-version=2.0

Si desea proporcionar el token de acceso personal (PAT) a través de un encabezado HTTP, primero debe convertirlo en una cadena Base64. En el ejemplo siguiente se muestra cómo convertir a Base64 mediante C#. A continuación, se puede proporcionar la cadena resultante como un encabezado HTTP en el formato .

Authorization: Basic BASE64PATSTRING

En el ejemplo siguiente se muestra C# mediante la clase 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());
	}
}

La mayoría de nuestros ejemplos usan PAT, ya que son un ejemplo compacto para autenticarse con el servicio. Sin embargo, hay varios mecanismos de autenticación disponibles para Azure DevOps Services, incluida la biblioteca de autenticación de Microsoft (MSAL), OAuth y tokens de sesión. Para obtener más información, consulte Guía de autenticación para ayudarle a determinar cuál es el más adecuado para su escenario.

Azure DevOps Server

Para Azure DevOps Server, instance es {server:port}. El puerto predeterminado para una conexión que no es SSL es 8080.

La colección predeterminada es DefaultCollection, pero puede usar cualquier colección.

Aquí se muestra cómo obtener una lista de proyectos de Azure DevOps Server mediante el puerto y la colección predeterminados en SSL:

curl -u {username}:{personalaccesstoken} https://{server}/DefaultCollection/_apis/projects?api-version=2.0

Para obtener la misma lista en una conexión no SSL:

curl -u {username}:{personalaccesstoken} http://{server}:8080/DefaultCollection/_apis/projects?api-version=2.0

En estos ejemplos se usan PAT, que requieren que cree un PAT.

Respuestas

Debería obtener una respuesta 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
}

La respuesta es JSON, que suele ser lo que se obtiene de las API REST, aunque hay algunas excepciones, como los blobs de Git.

Ahora, puede buscar en torno a las áreas de API específicas, como el seguimiento de elementos de trabajo o Git, y acceder a los recursos que necesita. Siga leyendo para obtener más información sobre los patrones generales que se usan en estas API.

Verbos HTTP

Verbo Se usa para...
GET Obtener un recurso o una lista de recursos
PUBLICAR Creación de un recurso, Obtención de una lista de recursos mediante una consulta más avanzada
PUT Cree un recurso si no existe o, si lo hace, actualícelo.
PATCH Actualización de un recurso
Delete Eliminar un recurso

Encabezados de solicitud y contenido de la solicitud

Al proporcionar el cuerpo de la solicitud (normalmente con los verbos POST, PUT y PATCH), incluya encabezados de solicitud que describen el cuerpo. Por ejemplo,

POST https://dev.azure.com/fabrikam-fiber-inc/_apis/build-release/requests
Content-Type: application/json
{
   "definition": {
      "id": 3
   },
   "reason": "Manual",
   "priority": "Normal"
}

Invalidación del método HTTP

Algunos servidores proxy web solo pueden admitir los verbos HTTP GET y POST, pero no verbos HTTP más modernos como PATCH y DELETE. Si las llamadas pueden pasar a través de uno de estos servidores proxy, puede enviar el verbo real mediante un método POST, con un encabezado para invalidar el método. Por ejemplo, es posible que quiera actualizar un elemento de trabajo (PATCH _apis/wit/workitems/3), pero es posible que tenga que pasar por un proxy que solo permita GET o POST. Puede pasar el verbo adecuado (PATCH en este caso) como parámetro de encabezado de solicitud HTTP y usar POST como 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 respuesta

Respuesta Notas
200 El éxito y hay un cuerpo de respuesta.
201 Correcto, al crear recursos. Algunas API devuelven 200 al crear correctamente un recurso. Consulte los documentos de la API que usa para asegurarse.
204 El éxito y no hay ningún cuerpo de respuesta. Por ejemplo, obtendrá esta respuesta al eliminar un recurso.
400 Los parámetros de la dirección URL o del cuerpo de la solicitud no son válidos.
401 Error de autenticación. A menudo, esta respuesta se debe a un encabezado de autorización que falta o tiene un formato incorrecto.
403 El usuario autenticado no tiene permiso para realizar la operación.
404 El recurso no existe o el usuario autenticado no tiene permiso para ver que existe.
409 Hay un conflicto entre la solicitud y el estado de los datos en el servidor. Por ejemplo, si intenta enviar una solicitud de incorporación de cambios y ya hay una solicitud de incorporación de cambios para las confirmaciones, el código de respuesta es 409.

Uso compartido de recursos entre orígenes (CORS)

Azure DevOps Services admite CORS, lo que permite que el código JavaScript servido desde un dominio distinto de dev.azure.com/* realizar solicitudes de Ajax a las API REST de Azure DevOps Services. Cada solicitud debe proporcionar credenciales (las PAT y los tokens de acceso de OAuth son ambas opciones compatibles). Ejemplo:

    $( 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 );
        });
    });

(reemplace por myPatToken un token de acceso personal)

Control de versiones

Las API REST de Azure DevOps tienen versiones para asegurarse de que las aplicaciones y los servicios siguen funcionando a medida que evolucionan las API.

Directrices

  • Especifique la versión de la API con cada solicitud (necesaria).
  • Dar formato a las versiones de API como se indica a continuación: {major}. {minor}-{stage}. {resource-version}. Por ejemplo, 1.0, 1.1, 1.2-preview, 2.0.
  • Especifique una revisión determinada de la API cuando se encuentra en versión preliminar mediante el siguiente formato de versión: 1.0-preview.1, 1.0-preview.2. Una vez publicada una API (1.0, por ejemplo), su versión preliminar (1.0-preview) está en desuso y se puede desactivar después de 12 semanas.
  • Actualice a la versión publicada de la API. Una vez desactivada una API en versión preliminar, se rechazan las solicitudes que especifican -preview la versión.

Uso

Especifique la versión de la API en el encabezado de la solicitud HTTP o como parámetro de consulta de dirección URL.

Encabezado de solicitud 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

Versiones compatibles

Para obtener información sobre las versiones admitidas, consulte Versiones admitidas de la API rest.