拡張機能と統合で URL を操作する

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

Azure DevOps 組織のリソースと API には、次の 2 つの URL 形式でアクセスできます。

URLフォーム
新規 https://dev.azure.com/{organization}
遺産 https://{organization}.visualstudio.com

組織レベルの REST API は、組織の作成時に関係なく、どちらの URL フォームも受け入れます。 詳細については、 Azure DevOps Services REST API リファレンスを参照してください

プライマリ URL

各組織には、新しい形式またはレガシ形式で指定された プライマリ URL があります。 管理者はプライマリ URL を変更できます。 既定値は、組織を作成した日時に基づいています。

作成済み 既定のプライマリ URL
2018 年 9 月 10 日以降 新規
2018 年 9 月 10 日より前 遺産

プライマリ URL の使用方法

Azure DevOps は、バックグラウンド ジョブおよび自動化されたシナリオで構築するすべての URL のベースとしてプライマリ URL を使用します。

  • パイプライン タスク環境変数 ( SYSTEM_TEAMFOUNDATIONCOLLECTIONURI など)
  • サービスはイベント ペイロード ( resourceContainers の URL など) をフックします
  • 電子メール、Slack、Microsoft Teams、および同様の通知

たとえば、次のタスク スニペットは組織の URL を表示します。

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

出力は、組織のプライマリ URL フォーム ( https://dev.azure.com/{organization} または https://{organization}.visualstudio.com) によって異なります。 パイプライン タスクとサービス フック コンシューマーが両方の URL フォームを処理していることを確認します。

REST API で返される URL

組織のプライマリ URL に関係なく、REST API 呼び出しに対する応答で返される URL は、要求元の URL と同じベース URL を使用します。 この関数により、レガシ URL を使用して REST API を呼び出すクライアントは、同じ (レガシ) 形式で URL を引き続き取得できます。 たとえば、Projects REST API がレガシ URL を使用して呼び出されると、応答内の URL は従来の形式を使用します。

リクエスト

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

[応答]

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

新しい URL (https://dev.azure.com/Fabrikam/_apis/projects/MyProject) を使用して同じ API を呼び出すと、新しい URL 形式で URL が返されます。

ベスト プラクティス

拡張機能、ツール、または統合を URL の変更に対する回復性を維持するには:

  • 固定の組織の URL フォームを想定しないでください。 時間の経過と同時に変化する可能性があります。
  • 他の URL を作成するために URL を解析または格納しないでください。
  • REST API が常に同じドメイン上にあると想定しないでください。
  • 可能な場合は、Microsoft が提供するクライアント ライブラリ (.NETNode.jsPython) を使用します。URL 解決は自動的に処理されるためです。

組織の URL を取得する

グローバル リソース領域 REST API (https://dev.azure.com/_apis/resourceAreas) を使用して、組織のベース URL を名前または ID から解決できます。 この API では認証は必要ありません。

リソース領域は、固定 GUID によって識別される、関連する REST API エンドポイントのグループです。 各リソース領域には、組織ごとに異なるベース URL を設定できます。 たとえば、Fabrikam の ビルド API では https://dev.azure.com/Fabrikamを使用し、 リリース管理 API では https://vsrm.dev.azure.com/Fabrikamを使用します。

Resource Areas REST API は、組織の指定されたプライマリ URL に基づいて URL を返します。

組織名別

{organizationName}を組織の名前に置き換えます。 GUID 79134C72-4A58-4B42-976C-04E7115F32BFは、プロジェクトなどのリソースを含むコア リソース領域を識別します。

リクエスト

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

[応答]

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

locationUrl フィールドには、組織のベース URL が含まれています。

組織 ID 別

名前ではなく組織 GUID で URL を解決するには、(hostIdではなく) accountName クエリ パラメーターを使用します。

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

REST API のベース URL を取得する

組織レベルのリソース領域 REST API を使用して、任意の REST API の正しいベース URL を検索します。 この方法により、API ドメインが変更されたときにコードの回復性が維持されます。

Microsoft が提供するクライアント ライブラリ (.NET、TypeScript、Node.js、Python) は、URL 参照を自動的に処理します。 たとえば、.NET の VssConnection.GetClient<T>() は、既に正しいベース URL にバインドされているクライアントを返します。

クライアント ライブラリを使用していない場合:

  1. リソース領域 ID テーブルで、必要な API の リソース領域 ID を見つけます。 エリア名は、通常、ルート内の /_apis/ の後に表示されます。 たとえば、 /_apis/release/definitionsrelease 領域 (aaaabbbb-0000-cccc-1111-dddd2222eeee) に属します。

  2. 組織レベルの Resource Areas REST API をその ID で呼び出します。

    GET https://dev.azure.com/Fabrikam/_apis/resourceAreas/aaaabbbb-0000-cccc-1111-dddd2222eeee?api-version=5.0-preview.1
    
  3. 応答の locationUrl フィールドをベース URL として使用します。 この例では、リリース管理のベース URL が https://vsrm.dev.azure.com/Fabrikam

Resource Areas REST API には資格情報は必要ありません。

例: パイプライン タスクから Releases REST API を呼び出す

このパイプライン タスクは、 SYSTEM_TEAMFOUNDATIONCOLLECTIONURI 環境変数の組織の URL を使用して、Releases REST API の正しいベース URL を解決します。

リソース領域 ID は固定されており、タスクやその他のロジックに安全に埋め込むことができます。

$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

次の表に、一般的なリソース領域の ID を示します。 リソース領域 ID は、すべての Azure DevOps Services 組織で固定され、一貫性があります。

リソース領域 ID 名前
0D55247A-1C47-4462-9B1F-5E2125590EE6 アカウント
5D6898BB-45EC-463F-95F9-54D49C71752E ビルド
79BEA8F8-C898-4965-8C51-8BBC3966FAA8 コレクション
79134C72-4A58-4B42-976C-04E7115F32BF コア
31C84E0A-3ECE-48FD-A29D-100849AF99BA ダッシュボード
A0848FA1-3593-4AEC-949C-694C73F4C4CE 委任認証
6823169A-2419-4015-B2FD-6FD6F026CA00 ディスカッション
A85B8835-C1A1-4AAC-AE97-1C3D0BA72dbd 分散タスク
7BF94C77-0CE1-44E5-A0F3-263E4EBBF327 ドロップする
6C2B0933-3600-42AE-BF8B-93D4F7E83594 拡張機能の管理
67349C8B-6425-42F2-97B6-0843CB037473 お気に入り
4E080C62-FA21-4FBC-8FEF-2A10A2B38049 git
4E40F190-2E3F-4D9F-8331-C7788E833080 グラフ
68DDCE18-2501-45F1-A17B-7931A9922690 メンバー権限管理
B3BE7473-68EA-4A81-BFC7-9530BAAA19AD NuGet
4C83CFC1-F33A-477E-A789-29D38FFCA52E npm
45FB9450-A28D-476D-9B0F-FB4AEDDDFF73 パッケージ
7ab4e64e-c4d8-4f50-ae73-5ef2e21642a5 包装
2E0BF237-8973-4EC9-A581-9C3D679D1776 パイプライン
FB13A388-40DD-4A04-B530-013A739C72EF ポリシー
8ccfef3d-2b87-4e99-8ccb-66e343d2daa8 プロファイル
aaaabbbb-0000-cccc-1111-dddd2222eeee リリース
57731FDF-7D72-4678-83DE-F8B31266E429 レポート
ea48a0a1-269c-42d8-b8ad-ddc8fcdcf578 検索
3B95FB80-FDDA-4218-B60E-1052D070AE6B テスト
C83EAF52-EDF3-4034-AE11-17D38F25404C テスト結果
8AA40520-446D-40E6-89F6-9C9F9CE44C48 TFVC
970AA69F-E316-4D78-B7B0-B7137E47A22C ユーザー
5264459E-E5E0-4BD8-B118-0985E68A4EC5 知恵
1D4F49F9-02B9-4E26-B826-2CDB6195F2A9 作業
85F8C7B6-92FE-4BA6-8B6D-FBB67C809341 ワークトラッキング

IHostNavigationService インターフェイスを使用すると、拡張機能は親ホスト フレームと対話できます。 拡張機能は、これを使用して、URL ハッシュの読み取りと設定、URL への移動、ページの再読み込み、クエリ パラメーターの管理を行うことができます。

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

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

ハッシュ値

// 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");

再読み込みとドキュメント タイトル

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

クエリ パラメーター

// 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: "" });

完全な API については、 IHostNavigationServiceCommonServiceIds を参照してください。

次のステップ