> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Adicionar parâmetros de requisição

export const Compatibility = ({versions = [], label = "Available in"}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const defaultPillStyle = {
    borderColor: "#d4d4d8",
    background: "#f4f4f5",
    color: "#3f3f46"
  };
  const pillStyles = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#d8b4fe",
      color: "#6b21a8"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde047",
      color: "#854d0e"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#5eead4",
      color: "#115e59"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde047",
      color: "#854d0e"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#86efac",
      color: "#166534"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#93c5fd",
      color: "#1e40af"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fca5a5",
      color: "#991b1b"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fdba74",
      color: "#9a3412"
    }
  };
  const getPillStyle = name => ({
    ...defaultPillStyle,
    ...pillStyles[name] || ({})
  });
  return <div className="not-prose my-4 rounded-lg border border-zinc-200 bg-zinc-50 px-4 py-3 text-sm dark:border-white/10 dark:bg-white/5">
      <div className="flex flex-wrap items-center gap-x-2 gap-y-1">
        <span className="font-semibold text-zinc-700 dark:text-zinc-200">
          {label}:
        </span>
        {versions.map((v, i) => <span key={`${v.name}-${v.version}-${i}`} className="inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium" style={getPillStyle(v.name)}>
            <span>{v.name}</span>
            <span className="opacity-70">
              {v.version}
              {v.exact ? "" : "+"}
            </span>
          </span>)}
      </div>
    </div>;
};

<Compatibility
  versions={[
{ name: "AppSignal for Ruby", version: "4.0.0" },
{ name: "AppSignal for Elixir", version: "1.0.0" },
{ name: "AppSignal for Node.js", version: "3.0.0" },
{ name: "AppSignal for Python", version: "0.3.0" },
{ name: "AppSignal Collector", version: "0.6.0" },
{ name: "AppSignal for PHP", version: "0.5.0" },
]}
/>

Por padrão, as integrações do AppSignal rastreiam os parâmetros de requisição para requisições web em bibliotecas suportadas. Isso inclui parâmetros de consulta e o corpo da requisição POST\*. Para jobs em segundo plano, armazenamos os argumentos do job nos parâmetros.

<Tip>
  \*: O pacote AppSignal para PHP e as linguagens suportadas por meio de nosso [beta de OpenTelemetry](/opentelemetry) armazenam os parâmetros de consulta da requisição e os dados da payload da requisição separadamente.
  Veja a seção [dados da payload da requisição](#request-payload-data) para mais informações sobre como definir os dados da payload da requisição separadamente.
</Tip>

<Warning>
  🔐 Não envie <strong>Informações Pessoais Identificáveis (PII)</strong> para a AppSignal. Filtre PII (por exemplo, nomes, e-mails) e use um ID, hash ou identificador pseudonimizado no lugar. <br /> <br /> Use [Link Templates](https://docs.appsignal.com/application/link-templates) para vinculá-los de volta em sua aplicação.
</Warning>

Você pode definir parâmetros personalizados em uma transação ou span. Modificar os parâmetros de uma transação sobrescreverá os dados definidos pelas instrumentações do AppSignal.

[Todos os parâmetros são filtrados](/guides/filter-data/filter-parameters) por nossas integrações antes de serem enviados aos nossos servidores.

Veja a tabela abaixo para uma lista de valores raiz aceitos por linguagem. Cada objeto aninhado pode conter valores que resultem em JSON válido (strings, inteiros, floats, booleanos, nulls, etc.).

| Linguagem  | Valores raiz aceitos       |
| ---------- | -------------------------- |
| Ruby       | Arrays, Hashes             |
| JavaScript | Arrays, Objects            |
| Elixir     | Lists, Maps                |
| Python     | Lists, Maps                |
| Go         | String serializada em JSON |
| Java       | String serializada em JSON |
| PHP        | Arrays, Objects            |

O exemplo de código abaixo mostra como definir parâmetros de requisição personalizados:

<CodeGroup>
  ```ruby Ruby theme={null}
  # Os valores são mesclados no nível superior
  Appsignal.add_params(
    :post => {
      :title => "My title",
      :body => "Post text."
    }
  )
  Appsignal.add_params(:user => { :login => "some_name" })
  Appsignal.add_params(:user => { :id => 123 })
  # Parâmetros:
  # {
  #   :post => { :title => "My title", :body => "Post text." },
  #   :user => { :id => 123 }
  # }
  ```

  ```elixir Elixir theme={null}
  Appsignal.Span.set_sample_data(
    Appsignal.Tracer.root_span,
    "params",
    %{
      post: %{
        title: "My new blog post!",
        body: "Some long blog post text."
      }
    }
  )
  ```

  ```javascript Node.js theme={null}
  import { setParams } from "@appsignal/nodejs";

  setParams({
    post: {
      title: "My new blog post!",
      body: "Some long blog post text.",
    },
  });
  ```

  ```python Python theme={null}
  from appsignal import set_params

  set_params({
    post: {
      title: "My new blog post!",
      body: "Some long blog post text."
    }
  })
  ```

  ```go Go theme={null}
  // Uma configuração adicional é necessária para primeiro buscar ou criar um novo span
  import (
  	"encoding/json"

  	"go.opentelemetry.io/otel/attribute"
  	"go.opentelemetry.io/otel/trace"
  )

  params := map[string]interface{}{
  	"param1": "value1",
  	"param2": "value2",
  	"nested": map[string]interface{}{
  		"param3": "value3",
  		"param4": "value4",
  	},
  }
  json, _ := json.Marshal(params)
  span.SetAttributes(attribute.String("appsignal.request.query_parameters", string(json)))
  ```

  ```java Java theme={null}
  // Uma configuração adicional é necessária para primeiro buscar ou criar um novo span
  import io.opentelemetry.api.trace.Span;
  // Estamos usando a biblioteca JSON Jackson
  // Você pode precisar adicioná-la ao seu projeto como uma dependência
  import com.fasterxml.jackson.databind.ObjectMapper;
  import java.util.HashMap;
  import java.util.Map;

  Map<String, Object> queryParams = new HashMap<>();
  queryParams.put("param1", "value1");
  queryParams.put("param2", "value2");

  Map<String, String> nested = new HashMap<>();
  nested.put("param3", "value3");
  nested.put("param4", "value4");
  queryParams.put("nested", nested);

  try {
      ObjectMapper mapper = new ObjectMapper();
      String jsonString = mapper.writeValueAsString(queryParams);

      Span span = Span.current();
      span.setAttribute("appsignal.request.query_parameters", jsonString);
  } catch (Exception e) {
      // Adicione o tratamento de erros aqui
  }
  ```

  ```php PHP theme={null}
  <?php
  use Appsignal\Appsignal;

  $params = [
      'param1' => 'value1',
      'param2' => 'value2',
      'nested' => [
          'param3' => 'value3',
          'param4' => 'value4',
      ],
  ];

  Appsignal::setParams($params);
  ```
</CodeGroup>

Para certas linguagens, é necessária uma configuração adicional.
Siga as instruções para essas linguagens:

* [Go](/go/custom-instrumentation)
* [Java](/java/custom-instrumentation)

<img src="https://mintcdn.com/appsignal-715f5a51/MS9b5WO71lSfD5jG/assets/images/screenshots/sample_data/params.png?fit=max&auto=format&n=MS9b5WO71lSfD5jG&q=85&s=20e1ff3948a2f1fc3739ee2ea82a3ffb" alt="params" width="756" height="233" data-path="assets/images/screenshots/sample_data/params.png" />

## Dados da payload da requisição

O pacote AppSignal para PHP e as linguagens suportadas por meio de nosso [beta de OpenTelemetry](/opentelemetry) armazenam os parâmetros de consulta da requisição e os dados da payload da requisição separadamente.
Esta seção descreve como definir os dados da payload da requisição de requisições POST.

Você pode definir dados personalizados de payload de requisição em um span.
Modificar os dados de payload da requisição de um span sobrescreverá os dados definidos pelas instrumentações do AppSignal.

[Todos os parâmetros são filtrados](/guides/filter-data/filter-parameters) por nossas integrações antes de serem enviados aos nossos servidores.

Veja a tabela abaixo para uma lista de valores raiz aceitos por linguagem. Cada objeto aninhado pode conter valores que resultem em JSON válido (strings, inteiros, floats, booleanos, nulls, etc.).

| Linguagem | Valores raiz aceitos       |
| --------- | -------------------------- |
| Go        | String serializada em JSON |
| Java      | String serializada em JSON |
| PHP       | Arrays, Objects            |

O exemplo de código abaixo mostra como definir dados personalizados de payload de requisição:

<CodeGroup>
  ```go Go theme={null}
  // Uma configuração adicional é necessária para primeiro buscar ou criar um novo span
  import (
  	"encoding/json"

  	"go.opentelemetry.io/otel/attribute"
  	"go.opentelemetry.io/otel/trace"
  )

  payload := map[string]interface{}{
  	"param1": "value1",
  	"param2": "value2",
  	"nested": map[string]interface{}{
  		"param3": "value3",
  		"param4": "value4",
  	},
  }
  json, _ := json.Marshal(payload)
  span.SetAttributes(attribute.String("appsignal.request.payload", string(json)))
  ```

  ```java Java theme={null}
  // Uma configuração adicional é necessária para primeiro buscar ou criar um novo span
  import io.opentelemetry.api.trace.Span;
  // Estamos usando a biblioteca JSON Jackson
  // Você pode precisar adicioná-la ao seu projeto como uma dependência
  import com.fasterxml.jackson.databind.ObjectMapper;
  import java.util.HashMap;
  import java.util.Map;

  Map<String, Object> payload = new HashMap<>();
  payload.put("param1", "value1");
  payload.put("param2", "value2");

  Map<String, String> nested = new HashMap<>();
  nested.put("param3", "value3");
  nested.put("param4", "value4");
  payload.put("nested", nested);

  try {
      ObjectMapper mapper = new ObjectMapper();
      String jsonString = mapper.writeValueAsString(payload);

      Span span = Span.current();
      span.setAttribute("appsignal.request.payload", jsonString);
  } catch (Exception e) {
      // Adicione o tratamento de erros aqui
  }
  ```

  ```php PHP theme={null}
  <?php
  use Appsignal\Appsignal;

  $payload = [
      'param1' => 'value1',
      'param2' => 'value2',
      'nested' => [
          'param3' => 'value3',
          'param4' => 'value4',
      ],
  ];

  Appsignal::setPayload($payload);
  ```
</CodeGroup>

Para certas linguagens, é necessária uma configuração adicional.
Siga as instruções para essas linguagens:

* [Go](/go/custom-instrumentation)
* [Java](/java/custom-instrumentation)

## Limitações

Se a aplicação definir os parâmetros de consulta da requisição ou os dados de payload da requisição várias vezes, a gem Ruby mesclará os valores no nível raiz.
Para outras integrações, apenas o último valor definido é armazenado.
