Obter Resultados Programaticamente
Use o serviço REST para baixar um relatório resumido dos seus resultados de acessibilidade usando uma simples interface GET
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 adicional ou importação em outros softwares. O serviço GET tem dois parâmetros obrigatórios:
- **Chave API** - Encontre uma chave API pessoal correspondente ao seu projeto ou adicione uma nova chave API no Portal de Conta Axe. Escolha uma chave API do Axe Developer Hub se seu projeto usa as APIs web, CLI ou Watcher. Use uma chave 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 de projeto em Axe Developer Hub.
Você pode usar dois parâmetros opcionais para limitar sua consulta a um ramo específico do Git ou a um específico Git commit SHA.
Resumo da Solicitação
- **Endpoint**:
https://axe.deque.com/api-pub/watcher/downloadable/report - **Requisição**:
GET - **Cabeçalhos (Obrigatório)**:
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 de ramo 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 Git commit SHA especificado.
- **Exemplo de uso**:
GET https://axe.deque.com/api-pub/watcher/downloadable/report?project_id=<DEVHUB_PROJECT_ID>&commit_sha=<GIT_COMMIT_SHA>
Ao executar pela primeira vez, você provavelmente 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 Como lidar com uma resposta 202 Processing abaixo para um exemplo completo.
Exemplo curl de Requisiçã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 Lidando com uma Resposta 202 de Processamento para um script de exemplo de como 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 do commit Git associadas ao teste |
devhub_summary |
Objeto | Resumo dos problemas de acessibilidade encontrados |
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 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 Git associado ao teste:
| Campo | Tipo | Descrição |
|---|---|---|
sha |
String | Hash SHA completo do commit Git |
author |
String | Nome de usuário do autor do commit |
author_email |
String | Endereço de e-mail do autor do commit |
message |
String | Mensagem do commit |
branch_name |
String | Nome da branch onde o commit foi realizado |
repository_url |
String | URL do repositório Git |
tag |
String ou null |
Tag Git associada ao commit, se houver |
devhub_summary Objeto
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 | Divisão de problemas por nível de impacto |
issue_count_by_rule |
Array | Lista de problemas organizados por regra |
issue_count_by_impact Objeto
Divide 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 |
String | Link para a documentação da Deque University para a regra |
count |
Número | Contagem de problemas encontrados para esta regra |
Respostas Adicionais
202 Processing
Esta resposta indica que o relatório ainda está sendo gerado, e você precisa tentar novamente após aguardar.
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 da API especificada não é válida
Corpo da resposta
{
"error": "Invalid API key"
}Não há cabeçalho necessário com uma chave 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 geralmente significa que a suíte de testes não foi executada contra este commit Git. Note que este é o mesmo erro retornado com um nome de ramificação 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 do erro anterior (se o SHA fornecido com o commit_sha parâmetro de consulta 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 dos 404 erros anteriores.
Corpo da resposta
{
"error": "Session not found"
}Lidando com uma 202 Processing Resposta
Este script shell de demonstração mostra como usar curl para solicitar novamente o seu relatório se você receber uma 202 Processing resposta. Como as suítes de teste podem encontrar inúmeras violações de acessibilidade, nosso sistema pode exigir 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 continuará tentando ver se os resultados já estão disponíveis. Ele tentará novamente a solicitaçã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 definida para sua chave de API e PROJECT_ID seja definida para o ID do seu projeto.
Considere remover as instruçõ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