プログラムで結果を取得する
RESTサービスを使用して、シンプルなGETインターフェースを通じてアクセシビリティ結果のサマリーレポートをダウンロードする
この ダウンロード可能なレポート RESTサービスを使用すると、Axe Developer Hubのアクセシビリティ結果のサマリーをJSONデータとしてダウンロードできます。これはさらなる処理や他のソフトウェアへのインポートに使用できます。GETサービスには、2つの必須パラメーターがあります:
- APIキー - プロジェクトに対応する個人用APIキーを見つけるか、 Axeアカウントポータルで新しいAPIキーを追加してください。プロジェクトがWeb 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 Responseの処理 を以下をご覧ください。
例 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 処理中の応答の処理 、202 応答を処理するためのスクリプトの例です。
応答ボディの例
{
"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 ハッシュ |
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