# Main Settings

Main Settings é o conjunto de valores que se aplicam a uma [aplicação](/pt-br/documentacao/plataforma/applications/) como um todo: o nome, os Produtos habilitados nela, Debug Rules e o status. Azion Console agrupa esses valores na aba **Main Settings** da aplicação, e a API os retorna como campos do objeto da aplicação. Para o caminho que uma requisição percorre em uma aplicação, consulte [Como Applications funciona](/pt-br/documentacao/plataforma/applications/como-funciona/).

---

## Seções e campos

A aba **Main Settings** tem quatro seções: **General**, **Modules**, **Debug Rules** e **Status**. **General** guarda o **Name** da aplicação. A aba traz **Cancel** e **Save**, e uma alteração é salva com **Save**.

Cada seção corresponde a um ou mais campos da aplicação na API. A última coluna traz o valor que cada campo assume quando uma requisição de criação envia apenas `name` e `active`.

| Seção           | Configuração          | Campo da API                | Tipo    | Valor na criação                                                                              |
| --------------- | --------------------- | --------------------------- | ------- | --------------------------------------------------------------------------------------------- |
| **General**     | **Name**              | `name`                      | string  | O valor que a requisição de criação envia                                                     |
| **Modules**     | Um toggle por Produto | `modules.<product>.enabled` | boolean | `true` para `cache` e `functions`, `false` para `application_accelerator` e `image_processor` |
| **Debug Rules** | **Debug Rules**       | `debug`                     | boolean | `false`                                                                                       |
| **Status**      | **Status**            | `active`                    | boolean | O valor que a requisição de criação envia                                                     |

Por exemplo, uma aplicação que você cria pela API apenas com `name` e `active` tem Cache e [Functions](/pt-br/documentacao/plataforma/functions/) ativados desde o início, e Application Accelerator fica desativado até você ativá-lo.

O toggle **Status** desativa a aplicação e a ativa de novo sem excluí-la. A API carrega o mesmo estado no boolean `active`.

---

## Produtos

A seção **Modules** ativa ou desativa Produtos em uma aplicação, e cada aplicação mantém o próprio conjunto. O grupo **Default Modules** dessa seção tem um toggle por Produto: **Application Accelerator**, **Cache**, **Functions** e **Image Processor**. Um grupo **Subscription modules** traz uma ação **Contact sales**, e a seção informa que "Some modules require subscription."

| Produto                 | Chave em `modules`        | Flag da CLI                 | O que cobre na aplicação                                                                                                                                                                                                                       |
| ----------------------- | ------------------------- | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Application Accelerator | `application_accelerator` | `--application-accelerator` | As variáveis e os behaviors do Rules Engine que Azion Console marca com `- Required Application Accelerator`. Um cache setting precisa dele para as variações da seção **Application Accelerator** e para um **Max Age** menor que 60 segundos |
| Cache                   | `cache`                   | `--cache`                   | O armazenamento em cache do conteúdo que a aplicação entrega. Os cache settings são criados na aba **Cache Settings** e aplicados por um behavior **Set Cache Policy**                                                                         |
| Functions               | `functions`               | `--functions`               | As instâncias de função, listadas na aba **Functions Instances** e executadas por um behavior **Run Function**. Azion Console marca um behavior que precisa de Functions com `- Required Function`                                             |
| Image Processor         | `image_processor`         | `--image-processor`         | O behavior **Optimize Images**. Azion Console marca um behavior que precisa de Image Processor com `- Required Image Processor`                                                                                                                |

Cache fica ativado quando você cria uma aplicação, e Azion Console informa que ele é "Automatically enabled in all accounts." Você pode ativar um Produto quando a sua conta oferece suporte a ele, e desativá-lo quando nada na aplicação depende dele. Ativar um Produto pode gerar custos relacionados ao uso. Para mais informações, consulte [Preços](/pt-br/documentacao/fundamentos/precos/).

Uma regra ou um cache setting que precisa de um Produto desativado na aplicação é recusado quando você o salva, com um dos códigos da seção Erros. Por exemplo, uma regra de requisição cujo critério lê `${request_uri}` é recusada enquanto Application Accelerator está desativado, e a mesma regra com `${uri}` é aceita. Para as variáveis e os behaviors que cada Produto adiciona, consulte [Rules Engine para Applications](/pt-br/documentacao/plataforma/applications/rules-engine/).

Tiered Cache não tem toggle na seção **Modules**. Ele é um switch dentro de cada cache setting. Para mais informações, consulte [Tiered Cache](/pt-br/documentacao/plataforma/applications/cache/tiered-cache/).

---

## Debug Rules

Debug Rules registra as regras do Rules Engine executadas em cada requisição à aplicação. A configuração fica desativada quando você cria uma aplicação, e a API a guarda no boolean `debug`. No Azion Console, o toggle **Debug Rules** a define.

Com Debug Rules ativado, as regras executadas em uma requisição aparecem no campo `$traceback` do Data Stream e do [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/). A API GraphQL do Real-Time Events retorna as mesmas regras na variável `$stacktrace`. Uma regra que não está nessa lista não foi executada na requisição.

Por exemplo, quando uma regra **Set Cache Policy** parece não ter efeito em um path, o `$traceback` de uma requisição a esse path mostra se a regra chegou a ser executada. Para as consultas que leem o campo em cada ferramenta, consulte [Depure regras criadas com Rules Engine](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/debug-regras/).

---

## Configurações de entrega e protocolo

Main Settings não traz configurações de entrega nem de protocolo. Domínios, protocolos e certificados pertencem ao [workload](/pt-br/documentacao/plataforma/workloads/) que serve a aplicação, e as **Deployment Settings** do workload selecionam a **Application** que ele executa.

Em uma conta que não migrou para a API v4, a própria aplicação guarda os protocolos de entrega, as portas e as configurações de TLS. Para essas configurações, consulte [Main Settings | v3](/pt-br/documentacao/plataforma/applications/main-settings-v3/).

---

## API

A API serve as aplicações em `https://api.azion.com/v4/workspace/applications`. Cada chamada se autentica com um [personal token](/pt-br/documentacao/fundamentos/personal-tokens/) no header `Authorization: Token [TOKEN VALUE]`, e uma chamada com corpo também envia `Content-Type: application/json`.

| Operação                       | Método e path                                    | Status                                     |
| ------------------------------ | ------------------------------------------------ | ------------------------------------------ |
| Criar uma aplicação            | `POST /workspace/applications`                   | `202`, com `state` definido como `pending` |
| Listar as aplicações da conta  | `GET /workspace/applications`                    | `200`                                      |
| Ler uma aplicação              | `GET /workspace/applications/<application-id>`   | `200`                                      |
| Alterar parte de uma aplicação | `PATCH /workspace/applications/<application-id>` | `202`, com `state` definido como `pending` |

Esta chamada cria uma aplicação apenas com um nome e um status:

```bash
curl --request POST \
  --url https://api.azion.com/v4/workspace/applications \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "my-application",
  "active": true
}'
```

A API responde `202`. Neste trecho do corpo, `modules` e `debug` trazem os valores que a plataforma definiu na criação:

```text
{"state":"pending","data":{"id":<application-id>,"name":"my-application",…,"modules":{"cache":{"enabled":true},"functions":{"enabled":true},"application_accelerator":{"enabled":false},"image_processor":{"enabled":false}},"active":true,"debug":false,…}}
```

O `id` em `data` identifica a aplicação em todas as chamadas seguintes, incluindo os paths das regras dela, como `/workspace/applications/<application-id>/request_rules`.

Esta chamada ativa Application Accelerator em uma aplicação existente:

```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
    }
  }
}'
```

A API responde `202` com `state` definido como `pending`. Um corpo com `functions` no lugar de `application_accelerator` ativa Functions da mesma forma, e a resposta repete o objeto `modules` com as quatro chaves.

---

## CLI

[Azion CLI](/pt-br/documentacao/devtools/cli/) lê e altera uma aplicação com três comandos sob o substantivo `application`. Cada flag de Produto recebe uma string, como `true`.

| Comando                      | O que faz                                                                                                                                         |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `azion create application`   | Cria uma aplicação. `--cache` e `--image-processor` definem esses Produtos na criação                                                             |
| `azion update application`   | Altera a aplicação que `--application-id` nomeia. `--application-accelerator`, `--functions` e `--image-processor` ativam ou desativam um Produto |
| `azion describe application` | Retorna a aplicação que `--application-id` nomeia, com o objeto `modules` dela                                                                    |

Este comando ativa Application Accelerator:

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

```text
Updated Application with ID <application-id>
```

A saída de `azion describe application` inclui o objeto `modules` da aplicação:

```bash
azion describe application --application-id <application-id>
```

Em uma aplicação com os quatro Produtos ativados, o objeto fica assim:

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

---

## Erros

Um Produto desativado na aplicação aparece como a recusa do objeto que precisa dele, com `400`. Cada uma dessas recusas nomeia Application Accelerator. Este corpo responde a uma regra de requisição com `${request_uri}`:

```json
{
  "errors": [
    {
      "code": "25047",
      "title": "Missing Required Modules",
      "detail": " It requires any of the following modules to be enabled: ['application_accelerator'].",
      "status": "400",
      "source": { "pointer": "/data/criteria/0/0/variable" },
      "meta": {
        "message_prefix": "",
        "owner_modules": "any",
        "missing_required_modules": ["application_accelerator"]
      }
    }
  ]
}
```

`meta.missing_required_modules` lista as chaves que devem ser ativadas no objeto `modules` da aplicação.

| Código  | Título                                                                                            | Status | O que causa                                                                                                                                                                                                                | O que fazer                                                                                     |
| ------- | ------------------------------------------------------------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| `25047` | Missing Required Modules                                                                          | 400    | Uma regra de requisição cujos critérios leem `${request_uri}`, em uma aplicação com Application Accelerator desativado                                                                                                     | Ative Application Accelerator, ou faça a correspondência com `${uri}`, que a API aceita sem ele |
| `21013` | This Configuration Requires The Edge Application's Application Accelerator Module                 | 400    | Um cache setting que varia o cache por método ou por query string, em uma aplicação com Application Accelerator desativado. O pointer nomeia a variação, como `/data/modules/application_accelerator/cache_vary_by_method` | Ative Application Accelerator e, em seguida, salve o cache setting novamente                    |
| `21021` | Edge Cache Max Age Lower Than The Minimum Allowed By Application's Application Accelerator Module | 400    | Um cache setting cujo `modules.cache.max_age` é menor que 60, em uma aplicação com Application Accelerator desativado. `meta.min_value` é `60`                                                                             | Ative Application Accelerator, ou defina **Max Age** como 60 segundos ou mais                   |

---

## Recursos relacionados

- [Como Applications funciona](/pt-br/documentacao/plataforma/applications/como-funciona.md): O mecanismo por trás de uma aplicação, das regras dela e dos Produtos que ela executa.
- [Configurações do Application Accelerator](/pt-br/documentacao/plataforma/applications/application-accelerator/configuracoes.md): As variações de cache e os behaviors do Rules Engine que Application Accelerator adiciona a uma aplicação.
- [Cache settings](/pt-br/documentacao/plataforma/applications/cache/cache-settings.md): Os campos Browser Cache, Cache e Application Accelerator de um cache setting.
- [Depure regras criadas com Rules Engine](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/debug-regras.md): As consultas que leem as regras executadas em cada requisição quando Debug Rules está ativado.
