# Primeiros passos com Application Accelerator

Este guia conduz você pelo seu primeiro cache setting que varia a cache key. O exemplo é uma página de listagem cuja resposta muda com um argumento de query string.

- Ativar [Application Accelerator](/pt-br/documentacao/plataforma/applications/#application-accelerator) em uma aplicação.
- Criar um cache setting que mantém a listagem por 30 segundos e varia pelo argumento `category`.
- Adicionar uma regra do Rules Engine que aplica o cache setting às requisições para `/products`.
- Requisitar a listagem duas vezes, com dois valores de `category`, e ler a cache key de cada resposta.

Três objetos produzem esse resultado, e cada um depende do anterior:

1. O switch **Application Accelerator** pertence à aplicação. Ele libera os campos que variam a cache key e remove o piso de 60 segundos do cache TTL.
2. O **cache setting** carrega o behavior de cache, o **Max Age** e a variação. Ele define o que o cache faz, não a quais requisições ele faz isso.
3. A regra do [Rules Engine](/pt-br/documentacao/plataforma/applications/rules-engine/) aplica o cache setting com o behavior **Set Cache Policy**. Os critérios dela decidem quais requisições o cache setting cobre.

Criar um cache setting não altera nenhum tráfego. Um cache setting que nenhuma regra aplica nunca alcança uma requisição.

`azion.config.js` e Azion Lib carregam as mesmas configurações. Para o campo que cada interface define, consulte [Configurações do Application Accelerator](/pt-br/documentacao/plataforma/applications/application-accelerator/configuracoes/).

---

Selecione a interface que você vai usar. Os pré-requisitos e todas as etapas abaixo seguem essa escolha.

## Pré-requisitos

- Uma conta Azion. Para criar uma, consulte [Como criar uma conta na Azion](/pt-br/documentacao/fundamentos/criar-uma-conta/).
- A permissão **Edit Applications** na conta. Ela concede permissão para editar, criar e remover aplicações, e também requer a permissão **View Applications**. Consulte [Teams Permissions](/pt-br/documentacao/fundamentos/teams-permissions/).
- Uma aplicação que serve um path cuja resposta muda com um argumento de query string. Este guia usa o path `/products` e o argumento `category`. Para criar uma aplicação, consulte [Primeiros passos com Applications](/pt-br/documentacao/plataforma/applications/primeiros-passos/).

**Console**

- Acesso ao Azion Console. Para entrar, consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/).

**CLI**

- A [Azion CLI](/pt-br/documentacao/devtools/cli/) instalada e autorizada.

**API**

- Um [personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/) e o `curl`.

---

## Ative Application Accelerator

O módulo vem desativado por padrão e pertence a uma aplicação por vez.

**Console**

Para ativar o módulo pelo Azion Console:

1. **Abra a página Applications**

   Acesse [Azion Console](https://console.azion.com/) > **Applications**.

2. **Selecione a aplicação que serve a listagem**

3. **Vá para a aba Main Settings**

4. **Ative o módulo**

   Na seção **Modules**, ative **Application Accelerator**.

5. **Selecione Save**

A aplicação agora aceita os campos de cache que o restante deste guia usa.

**CLI**

Para ativar o módulo com a Azion CLI, substitua `<application_id>` pelo [ID da sua aplicação](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/definir-configuracoes-principais/):

1. **Execute o comando de atualização**

   ```bash
   azion update application --application-id <application_id> --application-accelerator true
   ```

2. **Leia a saída**

   O comando confirma a aplicação que ele atualizou:

   ```text
   Updated Application with ID <application_id>
   ```

A aplicação agora aceita os campos de cache que o restante deste guia usa.

**API**

Para ativar o módulo com a Azion API, substitua `[TOKEN VALUE]` pelo seu personal token e `<application_id>` pelo [ID da sua aplicação](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/definir-configuracoes-principais/):

1. **Envie a requisição de atualização**

   ```bash
   curl --request PATCH \
     --url https://api.azion.com/v4/workspace/applications/<application_id> \
     --header 'Accept: application/json' \
     --header 'Authorization: Token [TOKEN VALUE]' \
     --header 'Content-Type: application/json' \
     --data '{
     "modules": {
       "application_accelerator": {
         "enabled": true
       }
     }
   }'
   ```

2. **Leia a resposta**

   Um `202` carrega `"state": "pending"`, e a resposta repete todos os módulos da aplicação:

   ```json
   {
     "cache": { "enabled": true },
     "functions": { "enabled": true },
     "application_accelerator": { "enabled": true },
     "image_processor": { "enabled": false }
   }
   ```

   Os valores dos outros módulos são os que a aplicação já tinha. Só `application_accelerator` mudou.

A aplicação agora aceita os campos de cache que o restante deste guia usa.

> **Atenção**
>
> Ativar um módulo pode gerar custos relacionados ao uso. Para mais informações, consulte [Preços](/pt-br/documentacao/fundamentos/precos/#application-accelerator).

---

## Crie um cache setting que varia por query string

Um cache setting é onde ficam o behavior de cache e a variação. O **Max Age** de `30` segundos abaixo é o ponto do exercício: sem Application Accelerator, o menor cache TTL que uma aplicação aceita é 60 segundos.

**Console**

Para criar o cache setting pelo Azion Console:

1. **Vá para a aba Cache Settings**

2. **Selecione + Cache**

3. **Nomeie o cache setting**

   Digite um valor em **Name**. Por exemplo: `product-listing`.

4. **Defina o behavior de cache e o TTL**

   Em **Cache**, selecione *Override cache behavior* e defina **Max Age** como `30`.

5. **Varie a cache key pela query string**

   Em **Application Accelerator**, abra **Cache vary by Query String** e defina **Behavior** como *Allowlist*.

6. **Nomeie o argumento que varia a key**

   Adicione `category` à lista de campos em **Behavior**.

7. **Ordene os argumentos da query string**

   Ative **Sort**.

8. **Selecione Save**

O cache setting aparece na aba **Cache Settings**. Ele mantém um objeto por 30 segundos e dá a cada valor de `category` o seu próprio objeto em cache.

**CLI**

Para criar o cache setting com a Azion CLI, envie o body a partir de um arquivo: as flags do comando não alcançam o **Max Age**.

1. **Escreva o cache setting em um arquivo**

   Salve o seguinte como `cache-setting.json`:

   ```json
   {
     "name": "product-listing",
     "browser_cache": { "behavior": "honor" },
     "modules": {
       "cache": {
         "behavior": "override",
         "max_age": 30
       },
       "application_accelerator": {
         "cache_vary_by_querystring": {
           "behavior": "allowlist",
           "fields": ["category"],
           "sort_enabled": true
         }
       }
     }
   }
   ```

2. **Crie o cache setting**

   ```bash
   azion create cache-setting --application-id <application_id> --file cache-setting.json
   ```

   O comando imprime o id do novo cache setting:

   ```text
   Created Cache Settings configuration with ID 123462
   ```

3. **Leia o cache setting de volta**

   ```bash
   azion describe cache-setting --application-id <application_id> --cache-setting-id 123462 --format json
   ```

   Este trecho da saída carrega os campos que o arquivo definiu:

   ```json
   {
     "id": 123462,
     "name": "product-listing",
     "modules": {
       "cache": {
         "max_age": 30
       },
       "application_accelerator": {
         "cache_vary_by_querystring": {
           "behavior": "allowlist",
           "fields": ["category"],
           "sort_enabled": true
         }
       }
     }
   }
   ```

O cache setting mantém um objeto por 30 segundos e dá a cada valor de `category` o seu próprio objeto em cache. Guarde o id: a regra da próxima etapa seleciona o cache setting por ele. Para todas as flags que o comando aceita, consulte [Azion CLI create](/pt-br/documentacao/devtools/cli/recursos/).

**API**

Para criar o cache setting com a Azion API, substitua `[TOKEN VALUE]` pelo seu personal token e `<application_id>` pelo ID da sua aplicação:

1. **Envie a requisição de criação**

   ```bash
   curl --request POST \
     --url https://api.azion.com/v4/workspace/applications/<application_id>/cache_settings \
     --header 'Accept: application/json' \
     --header 'Authorization: Token [TOKEN VALUE]' \
     --header 'Content-Type: application/json' \
     --data '{
     "name": "product-listing",
     "browser_cache": { "behavior": "honor" },
     "modules": {
       "cache": {
         "behavior": "override",
         "max_age": 30
       },
       "application_accelerator": {
         "cache_vary_by_querystring": {
           "behavior": "allowlist",
           "fields": ["category"],
           "sort_enabled": true
         }
       }
     }
   }'
   ```

2. **Leia a resposta**

   Um `201` carrega `"state": "executed"` e o cache setting. Este trecho carrega o `id` e os campos que a requisição definiu:

   ```json
   {
     "state": "executed",
     "data": {
       "id": 123461,
       "name": "product-listing",
       "modules": {
         "cache": {
           "behavior": "override",
           "max_age": 30
         },
         "application_accelerator": {
           "cache_vary_by_querystring": {
             "behavior": "allowlist",
             "fields": ["category"],
             "sort_enabled": true
           }
         }
       }
     }
   }
   ```

   Um `max_age` abaixo de 60 é aceito apenas enquanto Application Accelerator está ativo.

O cache setting mantém um objeto por 30 segundos e dá a cada valor de `category` o seu próprio objeto em cache. Guarde o `id`: a regra da próxima etapa seleciona o cache setting por ele.

---

## Aplique o cache setting com uma regra

Um cache setting alcança uma requisição apenas quando uma regra o aplica.

**Console**

Para aplicar o cache setting ao path da listagem pelo Azion Console:

1. **Vá para a aba Rules Engine**

2. **Selecione + Rule**

3. **Nomeie a regra**

   Digite um nome para a regra. Por exemplo: `Cache the product listing`.

4. **Defina a fase**

   Selecione **Request Phase**.

5. **Selecione a variável**

   Na seção **Criteria**, selecione a variável `${uri}`.

6. **Selecione o operador de comparação**

   Selecione *starts with* como operador de comparação.

7. **Digite o argumento**

   Digite `/products` como argumento.

8. **Selecione o behavior**

   Na seção **Behaviors**, selecione **Set Cache Policy**.

9. **Selecione o cache setting que você criou**

10. **Selecione Save**

A regra aplica o cache setting a toda requisição cuja URI começa com `/products`.

**CLI**

Para adicionar a regra com a Azion CLI, envie o body a partir de um arquivo: os critérios carregam `${uri}`, que um shell expande.

1. **Escreva a regra em um arquivo**

   Salve o seguinte como `rule.json`, com o id do seu cache setting em `attributes.value`:

   ```json
   {
     "name": "Cache the product listing",
     "active": true,
     "criteria": [
       [
         {
           "conditional": "if",
           "variable": "${uri}",
           "operator": "starts_with",
           "argument": "/products"
         }
       ]
     ],
     "behaviors": [
       {
         "type": "set_cache_policy",
         "attributes": { "value": 123462 }
       }
     ]
   }
   ```

2. **Crie a regra**

   ```bash
   azion create rules-engine --application-id <application_id> --phase request --file rule.json
   ```

   O comando imprime o id da nova regra:

   ```text
   Created Rules Engine with ID 234570
   ```

A regra aplica o cache setting a toda requisição cuja URI começa com `/products`.

**API**

Para adicionar a regra com a Azion API, envie o body a partir de um arquivo: os critérios carregam `${uri}`, que um shell expande.

1. **Escreva a regra em um arquivo**

   Salve o seguinte como `rule.json`, com o `id` que a criação do cache setting retornou em `attributes.value`:

   ```json
   {
     "name": "Cache the product listing",
     "active": true,
     "criteria": [
       [
         {
           "conditional": "if",
           "variable": "${uri}",
           "operator": "starts_with",
           "argument": "/products"
         }
       ]
     ],
     "behaviors": [
       {
         "type": "set_cache_policy",
         "attributes": { "value": 123461 }
       }
     ]
   }
   ```

2. **Envie a requisição de criação**

   ```bash
   curl --request POST \
     --url https://api.azion.com/v4/workspace/applications/<application_id>/request_rules \
     --header 'Accept: application/json' \
     --header 'Authorization: Token [TOKEN VALUE]' \
     --header 'Content-Type: application/json' \
     --data @rule.json
   ```

3. **Leia a resposta**

   Um `202` carrega `"state": "pending"` e a regra, com o seu `id`, o seu `name`, se ela está `active`, os behaviors que ela carrega e o `order` que ela ocupa entre as regras da aplicação.

A regra aplica o cache setting a toda requisição cuja URI começa com `/products`.

Uma nova regra leva alguns minutos para propagar. Aguarde antes de requisitar o path.

---

## Leia a cache key

A Azion retorna a cache key de um objeto quando a requisição carrega o header de debug da Azion `Pragma: azion-debug-cache`. Ler essa key para dois valores de `category` mostra a variação que o cache setting criou.

Sua aplicação responde em um domínio no formato `xxxxxxxxx.map.azionedge.net`. Para definir o domínio da sua aplicação, consulte [Adicione um domínio a um workload](/pt-br/documentacao/guias/plataforma/migracao/configurar-dominio/).

Substitua `<your-azion-domain>` por esse domínio e requisite a listagem com um valor:

```bash
curl -I -H "Pragma: azion-debug-cache" "https://<your-azion-domain>/products?category=shoes"
```

A resposta carrega dois headers de debug da Azion. Este trecho é de uma aplicação servida em `www.example.com`, e HTTP/2 envia os nomes dos headers em minúsculas:

```text
x-cache: MISS from 203.0.113.10 with HTTP/2.0
x-cache-key: httpswww.example.com/products?category=shoes
```

`x-cache` carrega o status de cache, o endereço do data center que respondeu e o protocolo da requisição. `x-cache-key` carrega a cache key, que concatena o scheme, o host, o path e os argumentos de query string que a allowlist nomeou.

Requisite o mesmo path com um valor diferente:

```bash
curl -I -H "Pragma: azion-debug-cache" "https://<your-azion-domain>/products?category=hats"
```

O argumento mudou, então a key mudou junto:

```text
x-cache-key: httpswww.example.com/products?category=hats
```

Duas keys são dois objetos em cache, que é o que a allowlist pediu. Para o formato completo de uma cache key, consulte [Formato da cache key](/pt-br/documentacao/plataforma/applications/cache/cache-keys/#formato-da-key).

Sua aplicação agora mantém a listagem `/products` em cache por 30 segundos e guarda um objeto por valor de `category`.

---

## Próximos passos

- [Variação de cache](/pt-br/documentacao/plataforma/applications/application-accelerator/variacao-de-cache.md): O que cada valor distinto de um atributo que varia custa e como um cache TTL igual a zero difere de Bypass Cache.
- [Configurações do Application Accelerator](/pt-br/documentacao/plataforma/applications/application-accelerator/configuracoes.md): O nome, o tipo e o padrão de cada campo que este guia definiu, por interface.
- [Limites](/pt-br/documentacao/plataforma/applications/limites.md#application-accelerator): Os valores que delimitam um cache setting, incluindo o piso e o teto do TTL.
- [Configurar a Advanced Cache Key](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/advanced-cache-key.md): Varie a cache key por cookie e por device group, além da query string.
- [Real-Time Purge](/pt-br/documentacao/plataforma/applications/cache/real-time-purge.md): Remova um objeto que varia, o que um purge por URL sozinho não alcança.
- [Verificar indicadores de cache](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/verificar-tempo-de-cache-da-pagina.md): Leia os mesmos headers de debug da Azion em um navegador em vez de um terminal.
