Wprowadzenie do interfejsów API REST

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

Zintegruj aplikację z usługą Azure DevOps przy użyciu interfejsów API REST podanych w tym artykule.

Interfejsy API są zgodne ze wspólnym wzorcem, podobnie jak w poniższym przykładzie.

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

Napiwek

W miarę rozwoju interfejsów API zalecamy uwzględnienie wersji interfejsu API w każdym żądaniu. Takie rozwiązanie może pomóc uniknąć nieoczekiwanych zmian w interfejsie API, które mogą zostać przerwane.

Azure DevOps Services

W przypadku usługi Azure DevOps Services instance parametr to dev.azure.com/{organization} i collection to DefaultCollection, więc wzorzec wygląda podobnie do poniższego przykładu.

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

W poniższym przykładzie pokazano, jak uzyskać listę projektów w organizacji.

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

Jeśli chcesz podać osobisty token dostępu (PAT) za pośrednictwem nagłówka HTTP, musisz najpierw przekonwertować go na ciąg Base64. W poniższym przykładzie pokazano, jak przekonwertować na base64 przy użyciu języka C#. Wynikowy ciąg można następnie podać jako nagłówek HTTP w formacie .

Authorization: Basic BASE64PATSTRING

W poniższym przykładzie pokazano język C# przy użyciu klasy 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());
	}
}

Większość naszych przykładów używa paTs, ponieważ jest to kompaktowy przykład uwierzytelniania w usłudze. Istnieją jednak różne mechanizmy uwierzytelniania dostępne dla usług Azure DevOps Services, w tym biblioteki Microsoft Authentication Library (MSAL), protokołu OAuth i tokenów sesji. Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące uwierzytelniania, aby ułatwić określenie, który z nich najlepiej nadaje się do danego scenariusza.

Azure DevOps Server

W przypadku usługi Azure DevOps Server instance wartość to {server:port}. Domyślnym portem połączenia bez protokołu SSL jest 8080.

Domyślna kolekcja to DefaultCollection, ale można użyć dowolnej kolekcji.

Poniżej przedstawiono sposób uzyskiwania listy projektów z usługi Azure DevOps Server przy użyciu domyślnego portu i kolekcji w protokole SSL:

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

Aby uzyskać tę samą listę między połączeniem bez protokołu SSL:

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

W tych przykładach są używane usługi PAT, które wymagają utworzenia tokenu dostępu.

Odpowiedzi

Powinna zostać wyświetlona odpowiedź podobna do tej.

{
    "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
}

Odpowiedź to JSON, czyli ogólnie to, co można odzyskać z interfejsów API REST, chociaż istnieje kilka wyjątków, takich jak obiekty blob usługi Git.

Teraz możesz przyjrzeć się konkretnym obszarom interfejsu API, takim jak śledzenie elementów roboczych lub git, i uzyskać dostęp do potrzebnych zasobów. Czytaj dalej, aby dowiedzieć się więcej na temat ogólnych wzorców używanych w tych interfejsach API.

Czasowniki HTTP

Czasownik Służy do...
GET Pobieranie zasobu lub listy zasobów
POST Tworzenie zasobu, uzyskiwanie listy zasobów przy użyciu bardziej zaawansowanego zapytania
ODŁÓŻ Utwórz zasób, jeśli nie istnieje lub, jeśli tak, zaktualizuj go
PATCH Aktualizowanie zasobu
DELETE Usuwanie zasobu

Nagłówki żądań i zawartość żądania

Po podaniu treści żądania (zwykle z czasownikami POST, PUT i PATCH) dołącz nagłówki żądań opisujące treść. Przykład:

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

Zastępowanie metody HTTP

Niektóre internetowe serwery proxy mogą obsługiwać tylko czasowniki HTTP GET i POST, ale nie bardziej nowoczesne czasowniki HTTP, takie jak PATCH i DELETE. Jeśli wywołania mogą przechodzić przez jeden z tych serwerów proxy, możesz wysłać rzeczywiste zlecenie przy użyciu metody POST z nagłówkiem, aby zastąpić metodę . Na przykład możesz zaktualizować element roboczy (PATCH _apis/wit/workitems/3), ale może być konieczne przejście przez serwer proxy, który zezwala tylko na polecenie GET lub POST. Możesz przekazać odpowiednie zlecenie (PATCH w tym przypadku) jako parametr nagłówka żądania HTTP i użyć post jako rzeczywistej metody HTTP.

POST https://dev.azure.com/fabrikam-fiber-inc/_apis/wit/workitems/3
X-HTTP-Method-Override: PATCH
{
   (PATCH request body)
}

Kody odpowiedzi

Response Uwagi
200 Powodzenie i istnieje treść odpowiedzi.
201 Powodzenie podczas tworzenia zasobów. Niektóre interfejsy API zwracają wartość 200 podczas pomyślnego tworzenia zasobu. Zapoznaj się z dokumentami dotyczącymi interfejsu API, którego używasz, aby mieć pewność.
204 Powodzenie i nie ma treści odpowiedzi. Na przykład otrzymasz tę odpowiedź po usunięciu zasobu.
400 Parametry w adresie URL lub w treści żądania są nieprawidłowe.
401 Uwierzytelnianie nie powiodło się. Często ta odpowiedź jest spowodowana brakiem lub źle sformułowanym nagłówkiem autoryzacji.
403 Uwierzytelniony użytkownik nie ma uprawnień do wykonania operacji.
404 Zasób nie istnieje lub uwierzytelniony użytkownik nie ma uprawnień, aby zobaczyć, że istnieje.
409 Występuje konflikt między żądaniem a stanem danych na serwerze. Jeśli na przykład próbujesz przesłać żądanie ściągnięcia i istnieje już żądanie ściągnięcia dla zatwierdzeń, kod odpowiedzi to 409.

Współużytkowanie zasobów między źródłami (CORS)

Usługa Azure DevOps Services obsługuje mechanizm CORS, który umożliwia obsługę kodu JavaScript z domeny innej niż dev.azure.com/* wykonywanie żądań Ajax do interfejsów API REST usługi Azure DevOps Services. Każde żądanie musi podać poświadczenia (pakiety PAT i tokeny dostępu OAuth są obie obsługiwane opcje). Przykład:

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

(zastąp myPatToken ciąg osobistym tokenem dostępu)

Wersje

Interfejsy API REST usługi Azure DevOps są wersjonowane, aby zapewnić, że aplikacje i usługi będą nadal działać w miarę rozwoju interfejsów API.

Wytyczne

  • Określ wersję interfejsu API z każdym żądaniem (wymagane).
  • Formatuj wersje interfejsu API w następujący sposób: {major}. {minor}-{stage}. {resource-version}. Na przykład , 1.0, 1.1, 1.2-preview, 2.0.
  • Określ określoną poprawkę interfejsu API w wersji zapoznawczej, używając następującego formatu wersji: 1.0-preview.1, 1.0-preview.2. Po wydaniu interfejsu API (np. w wersji 1.0) jego wersja zapoznawcza (1.0-preview) jest wycofywana i może zostać zdezaktywowana po upływie 12 tygodni.
  • Uaktualnij do wydanej wersji interfejsu API. Po dezaktywowaniu interfejsu API w wersji zapoznawczej żądania określające -preview wersję są odrzucane.

Użycie

Określ wersję interfejsu API w nagłówku żądania HTTP lub jako parametr zapytania adresu URL.

Nagłówek żądania HTTP:

Accept: application/json;api-version=1.0

Parametr zapytania:

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

Obsługiwane wersje

Aby uzyskać informacje na temat obsługiwanych wersji, zobacz Obsługa wersji interfejsu API REST, Obsługiwane wersje.