結果をプログラムで取得
シンプルなGETインターフェースを使用して、RESTサービスでアクセシビリティ結果のサマリーレポートをダウンロード
この ダウンロード可能なレポート RESTサービスでは、Axe Developer Hubのアクセシビリティ結果の概要をJSONデータとしてダウンロードでき、さらなる処理や他のソフトウェアへのインポートが可能です。GETサービスには2つの必須パラメータがあります:
- APIキー - プロジェクトに対応する個別のAPIキーを取得するか、新しいAPIキーを Axeアカウントポータルで追加します。プロジェクトがウェブAPI、CLI、またはWatcherを使用している場合は、Axe Developer HubのAPIキーを選択してください。モバイルプロジェクトにはAxe DevTools MobileのAPIキーを使用します。
- プロジェクトID - ダウンロードしたい対応するプロジェクトデータのプロジェクトIDを提供します。 Axe Developer HubでプロジェクトIDを見つけてください。
2つのオプションパラメータを使用して、特定のGitブランチまたは特定の GitコミットSHAにクエリを絞り込むことができます。
リクエスト概要
- エンドポイント:
https://axe.deque.com/api-pub/watcher/downloadable/report - リクエスト:
GET - ヘッダー(必須):
X-API-Key:<DEQUE_API_KEY>Accept: application/json
- クエリパラメータ:
project_id(必須)- 説明:ダウンロードしたいプロジェクトのレポート用のプロジェクトIDを指定します。 このパラメータは必須です。
- 使用例:
GET https://axe.deque.com/api-pub/watcher/downloadable/report?project_id=<DEVHUB_PROJECT_ID>
branch_name(オプション)- 説明:指定されたGitブランチ名のダウンロード可能なレポートを返します。
- 使用例:
GET https://axe.deque.com/api-pub/watcher/downloadable/report?project_id=<DEVHUB_PROJECT_ID>&branch_name=<GIT_BRANCH>
commit_sha(オプション)- 説明:指定されたGitコミットSHAのダウンロード可能なレポートを返します。
- 使用例:
GET https://axe.deque.com/api-pub/watcher/downloadable/report?project_id=<DEVHUB_PROJECT_ID>&commit_sha=<GIT_COMMIT_SHA>
初回実行時には、 202 Processing レスポンスを受け取る可能性があります。これはダウンロード可能なレポートが生成されているためです。このレスポンスに対処し、リクエストを再試行するコードが必要です。 「202 Processingレスポンスの処理」 を参照して完全な例を確認してください。
例 curl リクエスト
curl -L -H 'Accept: application/json' -H 'X-API-Key: <DEQUE_API_KEY>' 'https://axe.deque.com/api-pub/watcher/downloadable/report?project_id=<DEVHUB_PROJECT_ID>'が返された場合、リクエストを再試行してください。 202 Processing を参照して、202レスポンスを処理するためのスクリプトの例を確認してください。 Handling a 202 Processing Response レスポンス本文の例
レスポンスオブジェクト
{
"report_id": "a4990926-3014-4799-aa39-7aca31fce412",
"source": {
"product_name": "axe-devtools-html",
"product_component_name": "axe-devtools-watcher",
"product_version": "3.20.2"
},
"test_details": {
"test_id": "da0c79a5-6f1e-4692-a255-5757629208fa",
"start_date": "2025-05-05T20:02:31.883Z",
"end_date": "2025-05-05T20:02:42.789Z"
},
"commit": {
"sha": "f73ea5a02386b359ffa79a76473f7a5ad41759d5",
"author": "John Doe",
"author_email": "john.doe@example.com",
"message": "Merge pull request #233 from deque/221-add-examples-for-using-global-config-fields-2",
"branch_name": "main",
"repository_url": "https://github.com/dequelabs/watcher-examples.git",
"tag": null
},
"devhub_summary": {
"issue_count_total": 17,
"issue_count_by_impact": {
"critical": 0,
"serious": 2,
"moderate": 15,
"minor": 0
},
"issue_count_by_rule": [
{
"severity": "serious",
"rule_id": "color-contrast",
"rule_help": "Elements must meet minimum color contrast ratio thresholds",
"rule_help_url": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"count": 2
},
{
"severity": "moderate",
"rule_id": "heading-order",
"rule_help": "Heading levels should only increase by one",
"rule_help_url": "https://dequeuniversity.com/rules/axe/4.10/heading-order?application=axeAPI",
"count": 2
},
{
"severity": "moderate",
"rule_id": "landmark-one-main",
"rule_help": "Document should have one main landmark",
"rule_help_url": "https://dequeuniversity.com/rules/axe/4.10/landmark-one-main?application=axeAPI",
"count": 2
},
{
"severity": "moderate",
"rule_id": "page-has-heading-one",
"rule_help": "Page should contain a level-one heading",
"rule_help_url": "https://dequeuniversity.com/rules/axe/4.10/page-has-heading-one?application=axeAPI",
"count": 2
},
{
"severity": "moderate",
"rule_id": "region",
"rule_help": "All page content should be contained by landmarks",
"rule_help_url": "https://dequeuniversity.com/rules/axe/4.10/region?application=axeAPI",
"count": 9
}
]
}
}以下のセクションでは、レスポンスボディ内のJSONオブジェクトについて説明します。
トップレベルの構造
フィールド
| 型 | 説明 | 文字列 |
|---|---|---|
report_id |
レポートの一意の識別子(UUID形式) | オブジェクト |
source |
レポートのソースに関する情報 | オブジェクト |
test_details |
テスト実行の詳細 | オブジェクト |
commit |
テストに関連するGitコミット情報 | オブジェクト |
devhub_summary |
検出されたアクセシビリティ問題の概要 | オブジェクト |
source レポートを生成した製品に関する情報を含む:
フィールド
| 型 | 説明 | 文字列 |
|---|---|---|
product_name |
製品名(例:「axe-devtools-html」) | 文字列 |
product_component_name |
製品内のコンポーネント名(例:「axe-devtools-watcher」) | 文字列 |
product_version |
テストに使用されたコンポーネントのバージョン | オブジェクト |
test_details テスト実行に関する情報を含む:
フィールド
| 型 | 説明 | 文字列 |
|---|---|---|
test_id |
テストの一意の識別子(UUID形式) | 文字列 |
start_date |
テスト開始時のISO 8601タイムスタンプ | 文字列 |
end_date |
テスト完了時のISO 8601タイムスタンプ | オブジェクト |
commit テストに関連するGitコミットに関する情報を含む:
フィールド
| 型 | 説明 | 文字列 |
|---|---|---|
sha |
Gitコミットの完全SHAハッシュ | Full SHA hash of the Git commit |
author |
文字列 | コミット作成者のユーザー名 |
author_email |
文字列 | コミット作成者のメールアドレス |
message |
文字列 | コミットメッセージ |
branch_name |
文字列 | コミットが行われたブランチの名前 |
repository_url |
文字列 | GitリポジトリのURL |
tag |
文字列 または null |
コミットに関連付けられたGitタグ(ある場合) |
devhub_summary オブジェクト
発見されたアクセシビリティ問題に関する概要情報を含みます:
| フィールド | タイプ | 説明 |
|---|---|---|
issue_count_total |
数値 | 発見されたアクセシビリティ問題の総数 |
issue_count_by_impact |
オブジェクト | 影響レベルごとの問題の内訳 |
issue_count_by_rule |
配列 | ルールごとに整理された問題のリスト |
issue_count_by_impact オブジェクト
問題を 影響レベルで分類します:
| フィールド | タイプ | 説明 |
|---|---|---|
critical |
数値 | 重大な影響を持つ問題の数 |
serious |
数値 | 深刻な影響を持つ問題の数 |
moderate |
数値 | 中程度の影響を持つ問題の数 |
minor |
数値 | 軽微な影響を持つ問題の数 |
issue_count_by_rule 配列
この配列の各オブジェクトは、以下の構造を持つルールを表します:
| フィールド | タイプ | 説明 |
|---|---|---|
severity |
文字列 | ルールの重大度 (「重大」、「深刻」、「中程度」、「軽微」) |
rule_id |
文字列 | ルールの識別子 |
rule_help |
文字列 | ルールの簡潔な説明 |
rule_help_url |
文字列 | ルールのDeque Universityドキュメントへのリンク |
count |
数値 | このルールで見つかった問題の数 |
追加の応答
202 Processing
この応答は、レポートがまだ生成中であることを示しており、待ってから再度リクエストを試す必要があることを示します。
応答本文
{
"message": "Report is still processing",
"state": "PROCESSING"
}400 Bad Request
提供された値は commit_sha がSHA-1値ではありません。
応答本文
{
"error": "commit_sha must be a valid SHA-1 hash"
}401 Unauthorized
以下のエラーメッセージのいずれかが 401 Unauthorized 応答に付随します。
指定されたAPIキーが無効です
応答本文
{
"error": "Invalid API key"
}APIキーを含む必要なヘッダーがありません:
応答本文
{
"error": "X-API-Key or Authorization header required"
}404 Not Found
以下のエラーメッセージのいずれかが 404 Not Found 応答に付随します。
使用されたSHA値が commit_sha 見つかりませんでした
このエラーは、このSHAに対応するデータがaxe Developer Hubデータにないことを示しています。通常、これはこのGitコミットに対してテストスイートが実行されていないことを意味します。存在しないブランチ名が指定された場合と同じエラーです。(次のエラーを参照してください。)
応答本文
{
"error": "Session not found"
}提供された値が branch_name 存在しません
このエラー応答は前のエラーと同じです( commit_sha クエリパラメータに指定されたSHAがaxe Developer Hubデータに存在しない場合)。
応答本文
{
"error": "Session not found"
}提供された値が project_id 存在しません
このエラー応答は前のエラーと同じです。 404 エラー。
応答本文
{
"error": "Session not found"
}応答の取り扱い 202 Processing 応答
このデモンストレーション用シェルスクリプトは curl を使用して、レポートを再リクエストする方法を示しています。 202 Processing 応答を受け取った場合、テストスイートは多数のアクセシビリティ違反を見つける可能性があるため、システムがすべての結果を処理してレポートがダウンロード可能になるまでに追加の時間が必要になることがあります。以下の例を使用して、結果が使用可能かどうかを継続的に再試行するスクリプトを作成することをお勧めします。このスクリプトは、リクエストを最大20回まで再試行し、試行間に5秒の遅延を設けます。
このサンプルでは、 API_KEY 環境変数を、APIキーに設定し、 PROJECT_ID をプロジェクトIDに設定する必要があります。
echo ステートメントを削除して stdout ダウンロード可能なレポートをリダイレクトしてキャプチャすることを検討してください。
#!/bin/bash
URL="https://axe.deque.com/api-pub/watcher/downloadable/report"
MAX_ATTEMPTS=20
DELAY=5
TEMP_FILE=$(mktemp)
for ((i=1; i<=MAX_ATTEMPTS; i++)); do
echo "Attempt $i..."
# Get both status and response
STATUS=$(curl -s -w '%{http_code}' -L -H "Accept: application/json" -H "X-API-Key: $API_KEY" -o "$TEMP_FILE" "$URL?project_id=$PROJECT_ID")
case $STATUS in
200)
echo "Success!"
cat "$TEMP_FILE"
rm "$TEMP_FILE"
exit 0
;;
202)
echo "Still processing, waiting ${DELAY}s..."
sleep $DELAY
;;
*)
echo "Error: HTTP $STATUS"
cat "$TEMP_FILE"
rm "$TEMP_FILE"
exit 1
;;
esac
done
echo "Timeout after $MAX_ATTEMPTS attempts"
rm "$TEMP_FILE"
exit 1