要約
Azure APIを使用すると、Microsoftのクラウドサービス(ストレージ、コンピューティング、データベース、AIなど)にプログラムでアクセスできます。Azure Active Directory(Entra ID)を使用して認証し、アクセストークンを取得し、RESTエンドポイントを呼び出します。テストとドキュメント作成には、Apidogを使用してAPI呼び出しを保存し、スキーマに対して応答を検証し、チームとコレクションを共有できます。
はじめに
Microsoft Azureには200を超えるサービスがあります。それぞれにAPIが備わっています。ほとんどの開発者は、ファイルのAzure Blob Storage、サーバーレスのAzure Functions、LLMのAzure OpenAIなど、少なくともいくつかのサービスに触れるでしょう。
問題は? Azureのドキュメントは膨大で散在しています。適切なエンドポイントを見つけ、認証を理解し、なぜリクエストが401 Unauthorizedを返すのかをデバッグするのに何時間も費やすことがあります。
このガイドでは、実際に使用するAPIに焦点を当てています。200のサービスではなく、ほとんどのアプリケーションを動かす5〜10のAPIです。認証パターン、よくある落とし穴、デプロイ前にAzure統合をテストする方法を学びます。
ApidogでAzure APIをテスト - 無料
このガイドの最後には、次のことができるようになります。
- Azure認証を正しく設定する(エラーの最大の原因)
- 動作する例を使用してAzure Storage、Compute、AI APIを呼び出す
- よくあるAzure APIエラーをデバッグする
- ApidogでAzure統合をテストし、ドキュメント化する
認証の問題(そしてその解決策)
すべてのAzure API呼び出しには認証が必要です。これを間違えると、他のすべてが失敗します。これはほとんどの開発者が行き詰まるポイントです。

Azure Active Directory / Microsoft Entra ID
AzureはAPI認証にOAuth 2.0を使用します。ユーザー名とパスワードを送信するのではなく、自身が誰であり、何ができるかを証明するアクセストークンを送信します。
フローは次のようになります。
- Azure AD(Entra ID)にアプリケーションを登録する
- クライアントIDとクライアントシークレットを取得する
- Azureのトークンエンドポイントからアクセストークンを要求する
- そのトークンをAPI呼び出しに含める
ステップ1:アプリケーションの登録
Azure Portal → Microsoft Entra ID → アプリの登録 → 新規登録に進みます。
名前を付け、内部アプリの場合は「この組織のディレクトリ内のアカウントのみ」を選択し、登録します。次のものが得られます。
- アプリケーション(クライアント)ID:
12345678-1234-1234-1234-123456789abc - ディレクトリ(テナント)ID:
87654321-4321-4321-4321-cba987654321
ステップ2:クライアントシークレットの作成
アプリの登録で、「証明書とシークレット」→「新しいクライアントシークレット」に進みます。シークレットの値をすぐにコピーしてください。再度表示されることはありません。
- クライアントシークレット:
abc123~DEF456-ghi789
ステップ3:アクセス許可の割り当て
APIのアクセス許可 → 許可の追加に進みます。Azure Storageの場合は「Azure Storage」→「user_impersonation」を選択します。Azure管理APIの場合は「Azure Service Management」→「user_impersonation」を選択します。
ステップ4:アクセストークンの取得
curl -X POST "https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id={client-id}" \
-d "client_secret={client-secret}" \
-d "scope=https://storage.azure.com/.default" \
-d "grant_type=client_credentials"
応答:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIs...",
"expires_in": 3599,
"token_type": "Bearer"
}
ステップ5:トークンの使用
curl -X GET "https://youraccount.blob.core.windows.net/container?restype=container&comp=list" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIs..." \
-H "x-ms-version: 2023-01-03"
生のHTTPではなくAzure SDKを使用する
本番コードでは、Azure SDKを使用してください。トークンの更新、再試行、シリアル化を処理します。
import { DefaultAzureCredential } from '@azure/identity'
import { BlobServiceClient } from '@azure/storage-blob'
// Azure CLIログインまたは環境変数を自動的に使用します
const credential = new DefaultAzureCredential()
const blobServiceClient = new BlobServiceClient(
'https://youraccount.blob.core.windows.net',
credential
)
// コンテナを一覧表示します
for await (const container of blobServiceClient.listContainers()) {
console.log(container.name)
}
しかし、テスト、デバッグ、ドキュメント作成のためには、生のHTTP呼び出しを理解する必要があります。そこでApidogの出番です。
Azure Storage API
Azure Storageは最もよく使用されるAzureサービスです。含まれるものは以下のとおりです。
- Blob Storage: ファイル、画像、バックアップ
- Queue Storage: メッセージキュー
- Table Storage: NoSQLキーバリュー型ストア
- File Storage: SMBファイル共有
Blob Storage API
コンテナの一覧表示:
GET https://{account}.blob.core.windows.net/?comp=list
Authorization: Bearer {token}
x-ms-version: 2023-01-03
コンテナの作成:
PUT https://{account}.blob.core.windows.net/{container}?restype=container
Authorization: Bearer {token}
x-ms-version: 2023-01-03
BLOBのアップロード:
PUT https://{account}.blob.core.windows.net/{container}/{blob}
Authorization: Bearer {token}
x-ms-version: 2023-01-03
Content-Type: text/plain
Hello, Azure Blob Storage!
BLOBのダウンロード:
GET https://{account}.blob.core.windows.net/{container}/{blob}
Authorization: Bearer {token}
x-ms-version: 2023-01-03
Apidogでのテスト
Azure Storage APIには特定のヘッダー(x-ms-version、正しい認証形式)が必要です。Apidogは次のことをサポートします。
- これらを再利用可能なリクエストとして保存する
- アカウント名とトークンに環境変数を使用する
- 応答が期待されるスキーマと一致することを検証する
ApidogでAzure Storage APIを設計およびテスト
Azure Compute API
Azure Computeを使用すると、仮想マシン、コンテナ、サーバーレス関数を管理できます。
Azure Functions API
Azure Functionsには、管理操作用のREST APIがあります。
関数アプリ内の関数を一覧表示:
GET https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{rg}/providers/Microsoft.Web/sites/{app-name}/functions?api-version=2023-01-01
Authorization: Bearer {management-token}
関数をトリガーする(HTTPトリガー):
POST https://{app-name}.azurewebsites.net/api/{function-name}
Content-Type: application/json
{
"name": "Azure",
"message": "Hello from API"
}
関数キーの取得:
POST https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{rg}/providers/Microsoft.Web/sites/{app-name}/functions/{function-name}/listKeys?api-version=2023-01-01
Authorization: Bearer {management-token}
Virtual Machines API
VMを一覧表示:
GET https://management.azure.com/subscriptions/{subscription-id}/providers/Microsoft.Compute/virtualMachines?api-version=2023-07-01
Authorization: Bearer {management-token}
VMを開始:
POST https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{rg}/providers/Microsoft.Compute/virtualMachines/{vm-name}/start?api-version=2023-07-01
Authorization: Bearer {management-token}
VMを停止:
POST https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{rg}/providers/Microsoft.Compute/virtualMachines/{vm-name}/powerOff?api-version=2023-07-01
Authorization: Bearer {management-token}
Azure AIサービスAPI
AzureはOpenAIモデルをホストし、視覚、音声、言語向けのコグニティブサービスを提供します。
Azure OpenAI API
補完の取得:
POST https://{resource-name}.openai.azure.com/openai/deployments/{deployment-id}/chat/completions?api-version=2024-02-15-preview
api-key: {your-api-key}
Content-Type: application/json
{
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is Azure?"}
],
"max_tokens": 500
}
デプロイを一覧表示:
GET https://{resource-name}.openai.azure.com/openai/deployments?api-version=2024-02-15-preview
api-key: {your-api-key}
Cognitive Services API
テキスト分析 - 感情分析:
POST https://{resource-name}.cognitiveservices.azure.com/text/analytics/v3.1/sentiment
Ocp-Apim-Subscription-Key: {subscription-key}
Content-Type: application/json
{
"documents": [
{
"id": "1",
"language": "en",
"text": "I love Azure APIs. They work great!"
}
]
}
Computer Vision - 画像分析:
POST https://{resource-name}.cognitiveservices.azure.com/vision/v3.2/analyze?visualFeatures=Description,Tags
Ocp-Apim-Subscription-Key: {subscription-key}
Content-Type: application/octet-stream
[binary image data]
ApidogでAzure APIをテストする
Azure APIは複雑な認証と正確なヘッダーを必要とします。手動でcurlを使用してテストすると、すぐにエラーが発生しやすくなります。Apidogは次の方法でこれを解決します。
1. 環境管理
Azure APIは複数のエンドポイントにわたります。
- コントロールプレーン用の
management.azure.com - ストレージ用の
{account}.blob.core.windows.net - AI用の
{resource}.openai.azure.com
それぞれに対してApidogで環境を作成します。
# 開発
MANAGEMENT_TOKEN: eyJ0eXAiOiJKV1Qi...
STORAGE_ACCOUNT: devstorage
OPENAI_RESOURCE: dev-openai
# 本番
MANAGEMENT_TOKEN: eyJ0eXAiOiJKV1Qi...
STORAGE_ACCOUNT: prodstorage
OPENAI_RESOURCE: prod-openai
2. トークン更新のための事前リクエストスクリプト
Azureトークンは1時間後に期限切れになります。事前リクエストスクリプトを追加します。
// トークンが期限切れかどうかを確認する
const tokenExpiry = pm.environment.get('token_expiry')
const now = Date.now() / 1000
if (!tokenExpiry || now >= tokenExpiry) {
// 新しいトークンを要求する
const response = await pm.sendRequest({
url: 'https://login.microsoftonline.com/' + pm.environment.get('tenant_id') + '/oauth2/v2.0/token',
method: 'POST',
header: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: {
mode: 'urlencoded',
urlencoded: [
{ key: 'client_id', value: pm.environment.get('client_id') },
{ key: 'client_secret', value: pm.environment.get('client_secret') },
{ key: 'scope', value: 'https://management.azure.com/.default' },
{ key: 'grant_type', value: 'client_credentials' }
]
}
})
const data = response.json()
pm.environment.set('management_token', data.access_token)
pm.environment.set('token_expiry', now + data.expires_in)
}
3. 応答の検証
Azureの応答が期待されるスキーマと一致することを検証します。
// BLOBリストが期待される構造を返すことをテストする
pm.test('Response has containers', () => {
const xml = pm.response.text()
pm.expect(xml).to.include('<Containers>')
pm.expect(xml).to.include('<Container>')
})
pm.test('Response is valid XML', () => {
pm.response.to.be.ok
pm.response.to.have.header('Content-Type', 'application/xml')
})
ApidogでAzure APIのテストを開始 - 無料
よくあるエラーとその修正方法
401 Unauthorized
原因: 無効なトークンまたは期限切れのトークン。
修正方法:
- トークンが期限切れになっていないか確認する(expires_inは通常3600秒)
- スコープが呼び出しているAPIと一致することを確認する
- アプリの登録に正しいアクセス許可があることを確認する
403 Forbidden
原因: トークンは有効だが、アクセス許可が不足している。
修正方法:
- Azure Portalでリソースに移動する
- アクセス制御(IAM)を確認する
- アプリのサービスプリンシパルにロールの割り当てを追加する
404 Not Found
原因: エンドポイントが間違っているか、リソースが存在しない。
修正方法:
- URL内のリソース名を確認する
- クエリ文字列内のAPIバージョンを確認する
- リソースが正しいリソースグループに存在することを確認する
429 Too Many Requests
原因: Azureのレート制限に達した。
修正方法:
- 指数バックオフを実装する
x-ms-ratelimit-remainingヘッダーを確認する- リクエストのバッチ処理を検討する
async function callWithRetry(fn, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await fn()
} catch (error) {
if (error.statusCode === 429) {
const delay = Math.pow(2, i) * 1000
await new Promise(resolve => setTimeout(resolve, delay))
} else {
throw error
}
}
}
}
代替案と比較
| 機能 | Azure API | AWS API | GCP API |
|---|---|---|---|
| 認証 | Azure AD (OAuth 2.0) | IAM (Sig v4) | OAuth 2.0 |
| SDKの品質 | 優れている | 優れている | 優れている |
| ドキュメント | 包括的だが散在している | サービス固有 | サービス固有 |
| レート制限 | サブスクリプションごと | サービスごと | プロジェクトごと |
| 無料枠 | 12ヶ月 + 常に無料 | 12ヶ月 | 常に無料 + クレジット |
Azureの認証は、AWSの署名ベースのアプローチよりも複雑ですが、エンタープライズのIDシステムとの統合性に優れています。
実世界のユースケース
Eコマースプラットフォーム。 Shopifyの代替サービスは、商品画像にAzure Blob Storageを、注文処理ウェブフックにAzure Functionsを、商品説明にAzure OpenAIを使用しています。変更をデプロイする前に、すべてのAPI呼び出しをApidogでテストします。
ヘルスケアSaaS。 医療記録システムは、患者データにAzure Cosmos DBを、HL7メッセージ処理にAzure Functionsを、シークレットにAzure Key Vaultを使用しています。APIテストは、すべての応答スキーマを検証することでHIPAAコンプライアンスを保証します。
AIスタートアップ。 AIエージェントを構築する企業は、LLM呼び出しにAzure OpenAIを、トレーニングデータにAzure Storageを、デプロイにAzure Container Appsを使用しています。ローカル開発中にApidogを使用してAzure APIをモックしています。
まとめ
以下に、あなたが学んだことをまとめます。
- Azure認証は、Azure AD(Entra ID)からのOAuth 2.0トークンを使用します。
- Storage APIには
x-ms-versionヘッダーと適切なBearerトークンが必要です。 - Compute APIはAzure Resource Managerエンドポイントを使用します。
- AIサービスは、サービスに応じてAPIキーまたはAADトークンを使用します。
- ApidogでAzure統合をテストし、ドキュメント化します。
次のステップ:
- Azure ADにアプリを登録し、資格情報を取得する
- クライアント資格情報フローを使用してアクセストークンを要求する
- 最初のAzure Storage API呼び出しを行う
- その呼び出しを再利用可能なリクエストとしてApidogに保存する
- プロジェクトのAzure APIのコレクションを構築する
ApidogでAzure APIをテスト - 無料
FAQ
Azure ADとMicrosoft Entra IDの違いは何ですか?両者は同じものです。Microsoftは2023年にAzure Active DirectoryをMicrosoft Entra IDにブランド変更しました。ドキュメントには両方の名前が表示されます。新しいドキュメントを作成する際はEntra IDを使用しますが、古い記事やコードではAzure ADが依然として一般的であることを知っておいてください。
Azure OpenAIのAPIキーはどうすれば取得できますか?Azure Portal → Azure OpenAI → ご利用のリソース → キーとエンドポイントに移動します。2つのキーが表示されますが、どちらでも機能します。セキュリティのために定期的に再生成してください。OpenAIのパブリックAPIとは異なり、Azure OpenAIを使用するにはまずAzureサブスクリプションとリソースのデプロイが必要です。
management.azure.comとサービス固有のエンドポイントの違いは何ですか?management.azure.comはAzure Resource Managerのエンドポイントです。これはAzureリソース自体のCRUD操作(VMの作成、ストレージアカウントの削除など)に使用されます。サービス固有のエンドポイント({account}.blob.core.windows.net、{resource}.openai.azure.com)は、それらのリソースを使用する(ファイルのアップロード、テキストの生成など)ためのものです。それぞれに異なるトークンが必要です。
Azureアクセストークンの有効期間はどのくらいですか?通常1時間(3600秒)です。古いトークンが期限切れになる前に新しいトークンを要求できます。トークン応答のexpires_inフィールドを使用して、いつ更新する必要があるかを知ることができます。API呼び出しごとに新しいトークンを要求しないでください。それは非効率的です。
クライアントシークレットの代わりにマネージドIDを使用できますか?はい、可能です。Azureで実行される本番ワークロードでは使用すべきです。マネージドIDはクライアントシークレットを保存する必要がなくなります。Azure VM、Functions、Container Apps、AKSで機能します。ローカル開発では、Azure CLI(az login)またはクライアントシークレットを含む環境変数を使用してください。
PostmanではAPI呼び出しが機能するのに、コードでは失敗するのはなぜですか?ヘッダーを確認してください。Azure APIはヘッダー名で大文字と小文字を区別します。Postmanが気づかないうちにヘッダーを追加している可能性があります。FiddlerやApidogのリクエスト検査ツールを使用して、Postmanからの生のリクエストとコードを比較してください。
AzureサブスクリプションなしでAzure APIをローカルでテストするにはどうすればよいですか?サブスクリプションなしで完全にテストすることはできませんが、Azureのローカルエミュレーターを使用できます。
- Azure Storage用のAzurite
- Functions用のAzure Functions Core Tools
- Apidogを使用してAzure API応答をモックする
Azure APIエラーを処理する最善の方法は何ですか?Azureは詳細なエラーJSONを返します。error.codeとerror.messageフィールドを解析してください。一般的なコードは次のとおりです。
AuthenticationFailed- トークンを確認してくださいResourceNotFound- リソース名を確認してくださいOperationNotAllowed- サブスクリプションの制限を確認してください
