Obtenha Resultados Programaticamente
Use o serviço REST para baixar um relatório resumido dos seus resultados de acessibilidade usando uma interface GET simples
O serviço de relatórios para download REST permite que você baixe um resumo dos seus resultados de acessibilidade do Axe Developer Hub como dados JSON, para processamento posterior ou importação para outros softwares. O serviço GET requer dois parâmetros obrigatórios:
- Chave de API - Encontre uma chave de API pessoal correspondente ao seu projeto ou adicione uma nova chave de API no Portal de Contas do Axe. Escolha uma chave de API do Axe Developer Hub se o seu projeto usar as APIs web, CLI ou Watcher. Use uma chave de API do Axe DevTools Mobile para projetos móveis.
- ID do Projeto - Forneça o ID do projeto para os dados do projeto correspondente que você deseja baixar. Encontre seu ID do projeto no Axe Developer Hub.
Você pode usar dois parâmetros opcionais para limitar sua consulta a um branch específico do Git ou um SHA do commit do Git.
Sumário da Solicitação
- Ponto de Extremidade:
https://axe.deque.com/api-pub/watcher/downloadable/report - Requisição:
GET - Cabeçalhos (Obrigatórios):
X-API-Key:<DEQUE_API_KEY>Accept: application/json
- Parâmetros de consulta:
project_id(Obrigatório)- Descrição: Especifica o ID do projeto para o relatório do projeto que você deseja baixar. Este parâmetro é obrigatório.
- Exemplo de uso:
GET https://axe.deque.com/api-pub/watcher/downloadable/report?project_id=<DEVHUB_PROJECT_ID>
branch_name(Opcional)- Descrição: Retorna o relatório para download para o nome do branch Git especificado.
- Exemplo de uso:
GET https://axe.deque.com/api-pub/watcher/downloadable/report?project_id=<DEVHUB_PROJECT_ID>&branch_name=<GIT_BRANCH>
commit_sha(Opcional)- Descrição: Retorna o relatório para download para o SHA do commit Git especificado.
- Exemplo de uso:
GET https://axe.deque.com/api-pub/watcher/downloadable/report?project_id=<DEVHUB_PROJECT_ID>&commit_sha=<GIT_COMMIT_SHA>
Na primeira execução, provavelmente você receberá uma 202 Processing resposta, pois o relatório para download está sendo gerado. Seu código precisará lidar com essa resposta e tentar novamente a solicitação. Veja Tratamento de uma Resposta 202 Processing abaixo para um exemplo completo.
Exemplo curl de Solicitação
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>'Se você receber uma 202 Processing resposta, você deve tentar novamente sua solicitação. Veja Manipulando uma Resposta de Processamento 202 para um script de exemplo para lidar com uma resposta 202.
Exemplo de Corpo de Resposta
{
"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
}
]
}
}Objeto de Resposta
As seções a seguir descrevem os objetos JSON no corpo da resposta.
Estrutura de Nível Superior
| Campo | Tipo | Descrição |
|---|---|---|
report_id |
String | Identificador único para o relatório (formato UUID) |
source |
Objeto | Informações sobre a origem do relatório |
test_details |
Objeto | Detalhes sobre a execução do teste |
commit |
Objeto | Informações de commit do Git associadas ao teste |
devhub_summary |
Objeto | Resumo das questões de acessibilidade encontradas |
source Objeto
Contém informações sobre o produto que gerou o relatório:
| Campo | Tipo | Descrição |
|---|---|---|
product_name |
String | Nome do produto (por exemplo, "axe-devtools-html") |
product_component_name |
String | Nome do componente dentro do produto (por exemplo, "axe-devtools-watcher") |
product_version |
String | Versão do componente usado para o teste |
test_details Objeto
Contém informações sobre a execução do teste:
| Campo | Tipo | Descrição |
|---|---|---|
test_id |
String | Identificador único para o teste (formato UUID) |
start_date |
String | Timestamp ISO 8601 para quando o teste começou |
end_date |
String | Timestamp ISO 8601 para quando o teste foi concluído |
commit Objeto
Contém informações sobre o commit do Git associado ao teste:
| Campo | Tipo | Descrição |
|---|---|---|
sha |
String | Hash SHA completo do commit do Git |
author |
String | Nome de usuário do autor do commit |
author_email |
String | Endereço de email do autor do commit |
message |
String | Mensagem do commit |
branch_name |
String | Nome da branch onde o commit foi feito |
repository_url |
String | URL do repositório Git |
tag |
String ou null |
Tag Git associada ao commit, se houver |
devhub_summary Object
Contém informações resumidas sobre problemas de acessibilidade encontrados:
| Campo | Tipo | Descrição |
|---|---|---|
issue_count_total |
Número | Número total de problemas de acessibilidade encontrados |
issue_count_by_impact |
Objeto | Detalhamento dos problemas por nível de impacto |
issue_count_by_rule |
Array | Lista de problemas organizados por regra |
issue_count_by_impact Object
Detalha os problemas por nível de impacto:
| Campo | Tipo | Descrição |
|---|---|---|
critical |
Número | Contagem de problemas de impacto crítico |
serious |
Número | Contagem de problemas de impacto sério |
moderate |
Número | Contagem de problemas de impacto moderado |
minor |
Número | Contagem de problemas de impacto menor |
issue_count_by_rule Array
Cada objeto neste array representa uma regra com a seguinte estrutura:
| Campo | Tipo | Descrição |
|---|---|---|
severity |
String | Nível de severidade da regra ("crítico", "sério", "moderado" ou "menor") |
rule_id |
String | Identificador da regra |
rule_help |
String | Descrição breve da regra |
rule_help_url |
Texto | Link para a documentação da Deque University para a regra |
count |
Número | Contagem de questões encontradas para esta regra |
Respostas Adicionais
202 Processing
Esta resposta indica que o relatório ainda está sendo gerado, e você deve tentar novamente sua requisição após esperar.
Corpo da resposta
{
"message": "Report is still processing",
"state": "PROCESSING"
}400 Bad Request
O valor fornecido para commit_sha não é um valor SHA-1.
Corpo da resposta
{
"error": "commit_sha must be a valid SHA-1 hash"
}401 Unauthorized
Uma das seguintes mensagens de erro acompanhará a 401 Unauthorized resposta.
A chave de API especificada não é válida
Corpo da resposta
{
"error": "Invalid API key"
}Não há um cabeçalho obrigatório com uma chave de API:
Corpo da resposta
{
"error": "X-API-Key or Authorization header required"
}404 Not Found
Uma das seguintes mensagens de erro acompanhará a 404 Not Found resposta.
O valor SHA usado com commit_sha não pôde ser localizado
Este erro indica que não há dados para este SHA no Axe Developer Hub, o que normalmente significa que a suíte de testes não foi executada contra este commit do Git. Observe que este é o mesmo erro retornado com um nome de branch que não existe. (Veja o próximo erro.)
Corpo da resposta
{
"error": "Session not found"
}O valor fornecido para branch_name não existe
Esta resposta de erro é a mesma que o erro anterior (se o SHA fornecido no parâmetro de consulta commit_sha não existir nos dados do Axe Developer Hub).
Corpo da resposta
{
"error": "Session not found"
}O valor fornecido para project_id não existe
Esta resposta de erro é a mesma que os anteriores 404 erros.
Corpo da resposta
{
"error": "Session not found"
}Lidando com uma 202 Processing Resposta
Este script de demonstração em shell mostra como usar curl para re-solicitar seu relatório se você receber uma 202 Processing resposta. Como as suítes de teste podem encontrar diversas violações de acessibilidade, nosso sistema pode requerer tempo adicional para processar todos os resultados antes que o relatório esteja pronto para download. Recomendamos usar o exemplo abaixo para criar um script que irá tentar continuamente e verificar se os resultados já estão disponíveis. Ele tentará novamente a requisição até 20 vezes, com um atraso de cinco segundos entre as tentativas.
O exemplo requer que a variável de ambiente API_KEY seja configurada para a sua chave de API e PROJECT_ID para que seja configurada para a sua ID de projeto.
Considere remover as declarações echo se você quiser redirecionar stdout e capturar seu relatório para download.
#!/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