---
title: Migração de sintaxe v2 para v3
slug: migracao-de-sintaxe-v2-para-v3
docTags: 
createdAt: 2024-04-26T20:08:53.333Z
---

## Resumo

Neste guia, exploraremos as mudanças na sintaxe necessárias para migrar do padrão da versão `v2.0` para a versão `v3.0` ao acessar dados dentro de um fluxo de processamento.

## TL;DR

Anteriormente, onde usávamos `.state` para acessar o JSON do payload de entrada ou acessar o resultado de um passo, agora usamos `.input.body` para o JSON de entrada ou `.steps.<nome_do_passo>.body` para o resultado de um passo.

Já para acessarmos os *headers* e *query parameters*, `.input.headers` e `.input.query_params` respectivamente.

## Alterações na sintaxe

### Exemplo de uso detalhado

Considere um exemplo prático onde um fluxo é disparado via [Gateway Fluid](docId\:TlDEO0voi8XWT2Iqj7OiV) com a seguinte URL e JSON de entrada (*payload*):

[`https://gtw.fluidapi.io/tenant/v2/flows/insere-produto?key=123&cod_cliente=2`](https://gtw.fluidapi.io/tenant/v2/flows/insere-produto?key=123\&cod_cliente=2)

```json
{
  "payload_campo_1": "valor do payload de entrada",
  "payload_campo_2": {
    "msg": "valor do payload de entrada"
  }
}
```

Considere que um passo chamado `passo_1` tenha gerado o seguinte resultado:

```json
{
  "campo_1": "resultado do campo 1",
  "campo_2": "resultado do campo 2"
}
```

### Acesso aos dados de entrada

Na versão `2.0`, os dados do JSON (*body*) de entrada eram acessados usando `.state`. Na versão `3.0`, isso foi refinado para melhor refletir a origem dos dados, utilizando `.input.body`.

Agora a forma para recuperar o campo `payload_campo_1` do *body* do webhook/evento de entrada/disparo do fluxo na **versão 3.0** é:

```go
{{.input.body.payload_campo_1}}
```

Onde, anteriormente na versão `2.0` usávamos:

```go
{{.state.payload_campo_1}}
```

### Acesso a *Headers* e *Query parameters* do payload de entrada

Com a atualização para a `v3.0`, é possível acessar os headers utilizando `.input.headers` e os *query parameters&#x20;*&#x75;tilizando `.input.query_params`.

**Exemplo para acessar os headers:**

```go
{{.input.headers | toJson}}
```

Ou para acessar diretamente um *header* específico:

```go
{{.input.headers.Authorization}}
```

:::hint{type="info"}
Caso o *header* (ou nome do passo, *query param*, etc) contenha algum caractere especial como hífen `-`, acesse com a seguinte sintaxe:
:::

```go
{{index .input.headers "Content-Type"}}
```

**Exemplo para acessar os query parameters:**

```go
{{.input.query_params}}
```

Ou acessar um parâmetro específico:

```go
{{.input.query_params.cod_cliente}}
```

### Acesso ao resultado de um passo do fluxo

Em relação ao resultado gerado pela execução de um passo específico no fluxo, a sintaxe também evoluiu. Na versão `v2.0`, costumávamos usar `.state.<nome_do_passo>` para acessar o *body* do resultado desse passo. Na versão `v3.0`, adotamos uma abordagem mais estruturada com `.steps.<nome_do_passo>.body`.

```go
{{.steps.passo_1.body}}
```

Onde anteriormente usávamos:

```go
{{.state.passo_1}}
```

Para acessar um resultado específico (`campo_x`) dentro do resultado do `passo_1`, na versão 3.0, utilize o exemplo conforme abaixo:

```go
{{.steps.passo_1.body.campo_x}}
```

Onde a sintaxe antiga `v2.0` era:

```go
{{.state.passo_1.campo_x}}
```

### Acesso a *Headers* e *Query parameters* do passo

Da mesma forma, é possível utilizar os dados para ter acesso aos headers utilizando `.steps.<nome_do_passo>.headers` e os *query parameters* utilizando `.steps.<nome_do_passo>.query_params` em um passo.

**Exemplo para acessar os headers de um passo:**

```go
{{.steps.passo_1.headers | toJson}}
```

Ou:

```go
{{index .input.headers "Content-Type"}}
```

**Exemplo para acessar os query parameters:**

```go
{{.steps.passo_1.query_params}}
```

Ou:

```go
{{.steps.passo_1.query_params.cod_cliente}}
```

### Conclusão

Esta atualização na sintaxe é crucial para garantir a compatibilidade e eficácia na manipulação de dados em ambientes de processamento de fluxo. Certifique-se de ajustar seus templates de acordo com essas novas orientações para aproveitar ao máximo os recursos da versão `v3.0`. Ao adotar essa nova abordagem, você estará alinhado com as melhores práticas e garantirá uma transição suave para a versão mais recente do sistema de processamento de dados.
