Usare gli URL nelle estensioni e nelle integrazioni

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

È possibile accedere alle risorse e alle API dell'organizzazione di Azure DevOps tramite due moduli URL:

Modulo URL Esempio
Nuovo https://dev.azure.com/{organization}
Eredità https://{organization}.visualstudio.com

Le API REST a livello di organizzazione accettano entrambi i moduli URL, indipendentemente dal momento in cui è stata creata l'organizzazione. Per altre informazioni, vedere Azure DevOps Services REST API Reference (Informazioni di riferimento sull'API REST di Azure DevOps Services).

URL primario

Ogni organizzazione ha un URL primario designato nel formato nuovo o legacy. Un amministratore può modificare l'URL primario. Il valore predefinito è basato su quando è stata creata l'organizzazione:

Creato URL primario predefinito
A partire dal 10 settembre 2018 Nuovo
Prima del 10 settembre 2018 Eredità

Come viene usato l'URL primario

Azure DevOps usa l'URL primario come base per tutti gli URL che costruisce nei processi in background e negli scenari automatizzati, tra cui:

  • Variabili di ambiente dell'attività della pipeline (ad esempio SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)
  • Payload degli eventi degli hook del servizio (ad esempio URL in resourceContainers)
  • Posta elettronica, Slack, Microsoft Teams e notifiche simili

Ad esempio, il frammento di attività seguente visualizza l'URL dell'organizzazione:

$orgUrl = $env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI
Write-Host $orgUrl

L'output dipende dal modulo URL primario dell'organizzazione, https://dev.azure.com/{organization} ovvero o https://{organization}.visualstudio.com. Assicurarsi che entrambi i formati URL siano gestiti dalle attività delle pipeline e dai consumer di hook del servizio.

URL restituiti nelle API REST

Indipendentemente dall'URL primario di un'organizzazione, gli URL restituiti nella risposta a una chiamata API REST usano lo stesso URL di base dell'URL richiedente. Questa funzione garantisce che i client che chiamano un'API REST usando un URL legacy continuino a recuperare gli URL nello stesso formato (legacy). Ad esempio, quando l'API REST Projects viene chiamata usando un URL legacy, gli URL nella risposta usano il formato legacy:

Richiesta

GET https://Fabrikam.visualstudio.com/_apis/projects/MyProject

Risposta

{
  "id": "e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5",
  "name": "MyProject",
  "url": "https://Fabrikam.visualstudio.com/_apis/projects/MyProject"
}

Chiamando la stessa API usando il nuovo URL (https://dev.azure.com/Fabrikam/_apis/projects/MyProject), gli URL vengono restituiti nella nuova forma URL.

Procedure consigliate

Per mantenere resiliente l'estensione, lo strumento o l'integrazione alle modifiche dell'URL:

  • Non assumere una forma fissa dell'URL dell'organizzazione. Può cambiare nel tempo.
  • Non analizzare o archiviare gli URL per costruire altri URL.
  • Non presupporre che un'API REST risieda sempre nello stesso dominio.
  • Usare le librerie client fornite da Microsoft (.NET, Node.js, Python) quando possibile, perché gestiscono automaticamente la risoluzione degli URL.

Ottenere l'URL di un'organizzazione

È possibile determinare l'URL di base di un'organizzazione dal nome o dall'ID utilizzando l'API REST globale delle Aree Risorse (https://dev.azure.com/_apis/resourceAreas). Questa API non richiede l'autenticazione.

Un'area di risorse è un gruppo di endpoint DELL'API REST correlati identificati da un GUID fisso. Ogni area di risorse può avere un URL di base diverso per ogni organizzazione. Ad esempio, le API di compilazione di Fabrikam possono usare , mentre le API https://dev.azure.com/Fabrikam usano https://vsrm.dev.azure.com/Fabrikam.

Annotazioni

L'API REST delle Aree di Risorse restituisce gli URL in base all'URL primario designato dell'organizzazione.

In base al nome dell'organizzazione

Sostituire {organizationName} con il nome dell'organizzazione. Il GUID 79134C72-4A58-4B42-976C-04E7115F32BF identifica l'area delle risorse di base , che contiene risorse come i progetti.

Richiesta

GET https://dev.azure.com/_apis/resourceAreas/79134C72-4A58-4B42-976C-04E7115F32BF
      ?accountName={organizationName}&api-version=5.0-preview.1

Risposta

{
    "id": "79134C72-4A58-4B42-976C-04E7115F32BF",
    "name": "Core",
    "locationUrl": "https://dev.azure.com/Fabrikam"
}

Il locationUrl campo contiene l'URL di base dell'organizzazione.

In base all'ID dell'organizzazione

Per risolvere l'URL in base al GUID dell'organizzazione anziché al nome, usare il parametro query hostId (anziché accountName):

GET https://dev.azure.com/_apis/resourceAreas/79134C72-4A58-4B42-976C-04E7115F32BF?hostId={organizationId}&api-version=5.0-preview.1

Ottenere l'URL di base per un'API REST

Utilizzare l'API REST Aree di Risorsa a livello di organizzazione per cercare l'URL di base corretto per qualsiasi API REST. Questo approccio mantiene il codice resiliente quando i domini API cambiano.

Annotazioni

Le librerie client fornite da Microsoft (.NET, TypeScript, Node.js, Python) gestiscono automaticamente la ricerca url. Ad esempio, VssConnection.GetClient<T>() in .NET restituisce un client già associato all'URL di base corretto.

Se non stai usando una libreria client:

  1. Trovare l'ID dell'area di risorse per l'API necessaria nella tabella ID area risorsa. Il nome dell'area viene in genere visualizzato dopo /_apis/ nel percorso. Ad esempio, /_apis/release/definitions appartiene all'area release (aaaabbbb-0000-cccc-1111-dddd2222eeee).

  2. Chiamare l'API REST Aree di Risorsa a livello di organizzazione con tale ID.

    GET https://dev.azure.com/Fabrikam/_apis/resourceAreas/aaaabbbb-0000-cccc-1111-dddd2222eeee?api-version=5.0-preview.1
    
  3. Usare il locationUrl campo dalla risposta come URL di base. In questo esempio, l'URL di base di Release Management è https://vsrm.dev.azure.com/Fabrikam.

Non sono necessarie credenziali per l'API REST Resource Areas.

Esempio: Chiamare l'API REST Release da un'attività della pipeline

Questa attività della pipeline risolve l'URL di base corretto per l'API REST Release usando l'URL dell'organizzazione dalla SYSTEM_TEAMFOUNDATIONCOLLECTIONURI variabile di ambiente.

Annotazioni

Gli ID dell'area delle risorse sono fissi e possono essere incorporati in modo sicuro nelle attività e in altre logiche.

$orgUrl = $env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI
$releaseManagementAreaId = "aaaabbbb-0000-cccc-1111-dddd2222eeee"

# Look up the base URL for Release Management APIs
$orgResourceAreasUrl = "${orgUrl}_apis/resourceAreas/${releaseManagementAreaId}?api-version=5.0-preview.1"
$results = Invoke-RestMethod -Uri $orgResourceAreasUrl
$rmUrl = $results.locationUrl

# Call the release definitions API
$releaseDefinitionsUrl = "${rmUrl}/_apis/release/definitions?api-version=5.0-preview.1"

ID aree risorsa

Nella tabella seguente sono elencati gli ID per le aree di risorse comuni. Gli ID area delle risorse sono fissi e coerenti in tutte le organizzazioni di Azure DevOps Services.

ID area della risorsa Nome
0d55247a-1c47-4462-9b1f-5e2125590e6 Conto
5D6898BB-45EC-463F-95F9-54D49C71752E costruire
79bea8f8-c898-4965-8c51-8bbc3966faa8 collezione
79134C72-4A58-4B42-976C-04E7115F32BF nucleo
31C84E0A-3ECE-48FD-A29D-100849AF99BA pannello di controllo
A0848FA1-3593-4AEC-949C-694C73F4C4CE autenticazione delegata
6823169A-2419-4015-B2FD-6FD6F026CA00 discussione
A85B8835-C1A1-4AAC-AE97-1C3D0BA72DBD task distribuito
7bf94c77-0ce1-44e5-a0f3-263e4ebbf327 goccia
6C2B0933-3600-42AE-BF8B-93D4F7E83594 extensionManagement
67349c8b-6425-42f2-97b6-0843cb037473 favorito
4E080C62-FA21-4FBC-8FEF-2A10A2B38049 Git
4E40F190-2E3F-4D9F-8331-C7788E833080 grafico
68ddce18-2501-45f1-a17b-7931a9922690 gestione delle assegnazioni dei membri
B3BE7473-68EA-4A81-BFC7-9530BAAA19AD NuGet
4C83CFC1-F33A-477E-A789-29D38FFCA52E npm
45FB9450-A28D-476D-9B0F-FB4AEDDFF73 pacchetto
7AB4E64E-C4D8-4F50-AE73-5EF2E21642A5 imballaggio
2e0bf237-8973-4ec9-a581-9c3d679d1776 Pipeline
FB13A388-40DD-4A04-B530-013A739C72EF politica
8ccfef3d-2b87-4e99-8ccb-66e343d2daa8 profilo
aaaabbbb-0000-cccc-1111-dddd2222eeee rilascio
57731FDF-7D72-4678-83DE-F8B31266E429 reportistica
EA48A0A1-269C-42D8-B8AD-DDC8FCDCF578 ricerca
3B95FB80-FDDA-4218-B60E-1052D070AE6B prova
C83EAF52-EDF3-4034-AE11-17D38F25404C risultati del test
8AA40520-446D-40E6-89F6-9C9F9CE44C48 tfvc
970AA69F-E316-4D78-B7B0-B7137E47A22C utente
5264459E-E5E0-4BD8-B118-0985E68A4EC5 arguzia
1d4f49f9-02b9-4e26-b826-2cdb6195f2a9 funzionano
85f8c7b6-92fe-4ba6-8b6d-fbb67c809341 monitoraggio del lavoro

L'interfaccia IHostNavigationService consente alle estensioni di interagire con il frame host padre. Le estensioni possono usarlo per leggere e impostare l'hash URL, passare agli URL, ricaricare la pagina e gestire i parametri di query.

import * as SDK from "azure-devops-extension-sdk";
import { CommonServiceIds, IHostNavigationService } from "azure-devops-extension-api";

const navService = await SDK.getService<IHostNavigationService>(CommonServiceIds.HostNavigationService);

Valore hash

// Get the current hash
const hash = await navService.getHash();
console.log("Host hash value: " + hash);

// Listen for hash changes
navService.onHashChanged((hash: string) => {
    console.log("Hash changed to: " + hash);
});

// Set hash (adds a new browser history entry)
navService.setHash("new-hash-value");

// Replace hash (no new history entry)
navService.replaceHash("replaced-hash-value");
// Navigate the host page
navService.navigate("https://dev.azure.com/myorg/myproject");

// Open a new browser window
navService.openNewWindow("https://dev.azure.com/myorg/myproject", "height=400,width=600");

Ricaricare e documentare il titolo

navService.reload();
navService.setDocumentTitle("My Custom Page Title");

Parametri di query

// Get current query parameters
const params = await navService.getQueryParams();
console.log(params);

// Set query parameters (pass empty string to remove a parameter)
navService.setQueryParams({ myParam: "value", removeMe: "" });

Per l'API completa, vedere IHostNavigationService e CommonServiceIds.

Passaggio successivo