# GraphiQL Playground

O GraphiQL Playground é um editor no navegador para a GraphQL API. Nele, você escreve, valida e executa queries na URL de endpoint que o serve, e o editor verifica erros na query enquanto você digita. Use-o para explorar os datasets e os campos de um endpoint e para testar uma query antes de enviá-la pelo código.

[Acessar o GraphiQL Playground](/pt-br/documentacao/devtools/graphql/primeiros-passos/)

---

## Abrir o Playground

Cada URL de endpoint da GraphQL API serve o Playground quando você a abre em um navegador. O Playground de um endpoint executa apenas os datasets que esse endpoint serve:

| URL do endpoint                                | Dados                                                |
| ---------------------------------------------- | ---------------------------------------------------- |
| `https://api.azion.com/v4/metrics/graphql`     | Métricas agregadas, como o dataset `workloadMetrics` |
| `https://api.azion.com/v4/events/graphql`      | Eventos brutos, como o dataset `workloadEvents`      |
| `https://api.azion.com/v4/billing/graphql`     | Dados de faturamento                                 |
| `https://api.azion.com/v4/accounting/graphql`  | Dados contábeis                                      |
| `https://api.azion.com/v4/consumption/graphql` | Dados de consumo                                     |

Para abrir o Playground, faça login no [Azion Console](https://console.azion.com/) e acesse a URL do endpoint no mesmo navegador. Sem uma sessão ativa, a URL retorna HTTP `401` com este corpo em vez do Playground:

```json
{"detail": "Authentication credentials were not provided."}
```

---

## Executar uma query

Para executar uma query, cole-a no editor do Playground e execute-a. O Playground valida a query contra o schema do endpoint enquanto você digita e marca cada erro que encontra. A resposta é um JSON: um objeto `data` com um array por dataset da query, ou uma mensagem `detail` quando a API recusa a query.

Uma query para um dataset que o endpoint não serve é recusada. Por exemplo, uma query `workloadEvents` enviada ao endpoint de métricas retorna HTTP `400`:

```json
{
  "detail": "Cannot query field \"workloadEvents\" on type \"Query\". Did you mean \"workloadMetrics\" or \"workloadBreakdownMetrics\"?"
}
```

Para executar essa query, abra o Playground do endpoint de eventos.

> **dica**
>
> Depois que uma query é executada, o Playground adiciona a query à URL da página como um parâmetro codificado. Copie a URL e compartilhe: quem abrir a URL recebe a mesma query.

---

## Queries de exemplo

As queries desta seção são executadas no Playground como estão escritas. Cada uma indica o endpoint cujo Playground a executa. Cole uma query e, em seguida, altere os campos, os filtros e as datas para ver como a resposta muda.

### Introspecção do schema

Esta query de introspecção é executada no Playground de qualquer um dos cinco endpoints. Ela retorna o schema desse endpoint: cada tipo, com os campos, os argumentos e os valores de enum, incluindo os depreciados e o motivo pelo qual cada um foi depreciado:

```graphql
query IntrospectionQuery {
    __schema {
        queryType { name }
        mutationType { name }
        subscriptionType { name }
        types {
            ...FullType       
        }
        directives {
            name
            description
            locations
            args {
                ...InputValue        
            }
        }
    }
}

fragment FullType on __Type {
    kind
    name
    description
    fields(includeDeprecated: true) {
        name
        description
        args {
            ...InputValue
        }
        type {
            ...TypeRef
        }
        isDeprecated
        deprecationReason
    }
    inputFields {
        ...InputValue
    }
    interfaces {
        ...TypeRef
    }
    enumValues(includeDeprecated: true) {
        name
        description
        isDeprecated
        deprecationReason
    }
    possibleTypes {
        ...TypeRef
    }
}

fragment InputValue on __InputValue {
    name
    description
    type { 
        ...TypeRef 
    }
    defaultValue
}

fragment TypeRef on __Type {
    name
    ofType {
        kind
        name
        ofType {
            kind
            name
            ofType {
                kind
                name
                ofType {
                    kind
                    name
                    ofType {
                        kind
                        name
                        ofType {
                            kind
                            name
                            ofType {
                                kind
                                name
                            }
                        }
                    }
                }
            }
        }
    }
}
```

A resposta indica `Query` como o tipo de query e retorna `null` para os tipos de mutation e de subscription: a GraphQL API lê dados e não tem mutations.

### Dados transferidos ao longo do tempo

A query `HttpCalculatedDataTransferred` lê o dataset `workloadMetrics` no Playground do endpoint de métricas. Ela seleciona `ts`, `dataTransferredIn`, `dataTransferredOut` e `dataTransferredTotal` para a janela em `tsRange`, agrupa as linhas por `ts`, ordena as linhas com `ts_ASC` e define `limit` como `2000`. O dataset depreciado `httpMetrics` aceita a mesma query; use `workloadMetrics`.

### IPs por trás dos ataques

A query `TOP5IPsWAFRequests` lê o dataset `workloadEvents`, então ela é executada no Playground do endpoint de eventos, `https://api.azion.com/v4/events/graphql`. Ela conta as requisições que o [WAF](/pt-br/documentacao/plataforma/firewall/#waf) sinalizou como ataques, agrupa as requisições por endereço IP do cliente e por família de ataque e retorna as cinco maiores contagens. No Playground do endpoint de métricas, a mesma query retorna HTTP `400`.

O endpoint de eventos mantém os registros por cerca de 7 dias. Substitua os valores de `begin` e `end` por uma janela dentro dos últimos 7 dias:

```graphql
query TOP5IPsWAFRequests {
  workloadEvents(
    limit: 5
    filter: {
      tsRange: {
        begin:"2026-09-26T14:00:00"
        end:"2026-10-03T14:00:00"
      },
      wafMatchNe: "-"
      wafAttackFamilyNe: "-"
    }
    aggregate: {
      count: rows
    }
    groupBy:[remoteAddress, wafAttackFamily]
    orderBy:[count_DESC]
  )
  {
    remoteAddress
    wafAttackFamily
    count
  }
}
```

Quando o WAF não sinalizou nenhuma requisição na janela, o array `workloadEvents` retorna vazio. Para saber o que cada argumento e cada campo faz, consulte [Encontre os IPs por trás do tráfego de ataque](/pt-br/documentacao/guias/plataforma/observabilidade/consultar-top-ips-gerando-trafego-de-ataque-com-graphql/).

### Principais famílias de ataque

A query `Top5Attacks` lê o dataset `workloadMetrics` no Playground do endpoint de métricas. Ela agrupa as requisições por família de ataque, classifica as famílias por `wafRequestsThreat`, o número de requisições que o WAF sinalizou como ameaças, e retorna as cinco maiores. Substitua os valores de `begin` e `end` pela sua janela:

```graphql
query Top5Attacks {
  workloadMetrics(
    limit: 5
    filter: {
      tsRange: {
        begin:"2026-09-26T14:00:00"
        end:"2026-10-03T14:00:00"
      }
    }
    groupBy:[wafAttackFamily]
    orderBy:[wafRequestsThreat_DESC]
  )
  {
    wafAttackFamily
    wafRequestsThreat
  }
}
```

Para uma janela em que o WAF não sinalizou nenhuma requisição, a resposta contém uma linha, com `-` como família de ataque e `0` requisições de ameaça:

```json
{
  "data": {
    "workloadMetrics": [
      {
        "wafAttackFamily": "-",
        "wafRequestsThreat": 0
      }
    ]
  }
}
```

Para saber o que cada argumento e cada campo faz, consulte [Encontre os principais ataques com GraphQL](/pt-br/documentacao/guias/plataforma/observabilidade/consultar-top-attacks-com-graphql/).

---

## Recursos relacionados

- [GraphQL API](/pt-br/documentacao/devtools/graphql.md): Todas as páginas da documentação da GraphQL API, dos primeiros passos aos campos de cada dataset.
- [Guias e tutoriais da GraphQL API](/pt-br/documentacao/devtools/graphql/guias.md): Mais queries para adaptar, cada uma em um guia que cobre uma tarefa.
- [Queries](/pt-br/documentacao/devtools/graphql/queries.md): Os formatos de query para dados brutos, agregados, financeiros e de uso, cada um com a resposta.
- [Datasets e argumentos de query](/pt-br/documentacao/devtools/graphql/recursos.md): Os datasets de cada endpoint e os argumentos de filtro, ordenação e paginação que uma query aceita.
