# API GraphQL

import DocButton from '~/components/webkit/DocButton.vue';

A **Graphic Query Language (GraphQL)** é uma linguagem criada especificamente para uso com APIs. Ela funciona como uma alternativa às APIs REST, permitindo que você receba seus dados de acordo com suas necessidades. A GraphQL traz autonomia para que o usuário solicite os dados que deseja e receba exatamente o que foi solicitado através de uma resposta em JSON.

A GraphQL busca dados de forma diferente das APIs tradicionais e permite filtrar dados sem precisar buscar quantidades desnecessárias de informações. As respostas precisas que ela fornece também proporcionam um melhor desempenho aos que usam a GraphQL, o que torna seu uso simples. Outra diferença da GraphQL comparada a outras APIs é que ela possui apenas um endpoint.

Você pode utilizar as duas APIs GraphQL da Azion para fazer um logpull de seus dados e aprimorar suas análises através da:

- [API GraphQL do Real-Time Metrics](/pt-br/documentacao/produtos/observe/real-time-metrics/), que fornece métricas agregadas em tempo real.
- [API GraphQL Real-Time Events](/pt-br/documentacao/produtos/observe/real-time-events/), que fornece logs brutos em tempo real.

<DocButton href="/pt-br/documentacao/devtools/graphql-api/queries/" label="saiba mais sobre dados agregados e brutos" size="medium" />

Você também pode usar as APIs GraphQL financeiras:

- [API GraphQL de Billing](/pt-br/documentacao/produtos/gestao-de-contas/billing-and-subscriptions/), que fornece dados relacionados às contas de faturamento, tipos de entradas financeiras e pagamentos.
- [API GraphQL de Accounting](/pt-br/documentacao/devtools/graphql-api/recursos/campos-gql-accounting/), que fornece dados relacionados a produtos e suas métricas sendo contabilizadas na conta do cliente.
- [API GraphQL de Consumption](/pt-br/documentacao/devtools/graphql-api/recursos/campos-gql-consumption/), que fornece dados relacionados ao uso dos produtos e suas métricas que estão sendo contabilizadas na conta do cliente.

Com a API GraphQL do Real-Time Metrics, você pode, por exemplo:

- Investigar de onde requisições que são ameaças de seguranças estão vindo, incluindo tráfego de bots e gerenciamento (se inscrito).
- Buscar os IPs com mais requisições.
- Ver os domínios com menos requisições.
- Analisar a quantidade de requisições por método HTTP.
- Consulte o número de usuários conectados às suas transmissões ao vivo.
- Encontrar os hosts com mais requisições.

Com a API GraphQL do Real-Time Events, você pode, por exemplo:

- Visualizar os top IPs que geram mais requisições.
- Visualizar as top URIs que recebem mais requisições.
- Visualizar requisições bloqueadas por IP ou por país.
- Visualizar os top user agents.
- Visualizar os top IPs por método de requisição.

Além disso, você não precisa de banco de dados, framework ou linguagem de programação específicos. Você pode usá-la com o código e com os dados que você já utiliza normalmente. A API utiliza queries para acessar seus dados e informações e filtrar o que você precisa.

Mesmo após fazer uma requisição, você pode modificar, deletar ou adicionar mais informações através de simples modificações na sua query.

A seguir, veja o exemplo de uma query:

```graphql
query HttpQuery {
  httpMetrics(
    filter: {
      tsRange: {begin: "2022-03-21T10:10:10", end: "2022-09-23T10:10:10"}
    }
  ) 
  {	
    ts
    geolocCountryName
    geolocRegionName
  }
}
```

E um exemplo da resposta em formato JSON que será recebida:

```json
{
    "data": {
        "httpMetrics": [
            {
                "ts": "2022-10-21T15:00:00Z",
                "geolocCountryName": "Canada",
                "geolocRegionName": "Quebec"
            },
            {
                "ts": "2022-10-21T14:00:00Z",
                "geolocCountryName": "Brazil",
                "geolocRegionName": "Parana"
            }
        ]
    }
}
```

Ao utilizar queries na API GraphQL da Azion, você pode consultar dados *raw* (*brutos*) e *aggregated* (*agregados*).

Se você utilizar dados agregados, a API busca seus dados de acordo com um intervalo pré-definido de *minutos*, *horas* ou *dias*.



---