> ## 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.

# Request-Parameter hinzufügen

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" },
]}
/>

Standardmäßig erfassen die AppSignal-Integrationen Request-Parameter für Web-Anfragen in unterstützten Bibliotheken. Dazu gehören Query-Parameter und der POST-Request-Body\*. Für Background-Jobs speichern wir die Job-Argumente in den Parametern.

<Tip>
  \*: Das AppSignal-for-PHP-Paket und die durch unsere [OpenTelemetry-Beta](/opentelemetry) unterstützten Sprachen speichern die Request-Query-Parameter und Request-Payload-Daten separat.
  Weitere Informationen zum separaten Setzen von Request-Payload-Daten finden Sie im Abschnitt [Request-Payload-Daten](#request-payload-data).
</Tip>

<Warning>
  🔐 Senden Sie keine <strong>personenbezogenen Daten (Personal Identifiable Information, PII)</strong> an AppSignal. Filtern Sie PII (z. B. Namen, E-Mail-Adressen) und verwenden Sie stattdessen eine ID, einen Hash oder einen pseudonymisierten Bezeichner. <br /> <br /> Verwenden Sie [Link Templates](https://docs.appsignal.com/application/link-templates), um sie in Ihrer Anwendung zurückzuverknüpfen.
</Warning>

Sie können benutzerdefinierte Parameter an einer Transaktion oder einem Span setzen. Das Ändern der Parameter einer Transaktion überschreibt die durch die AppSignal-Instrumentierungen gesetzten Daten.

[Alle Parameter werden gefiltert](/guides/filter-data/filter-parameters) durch unsere Integrationen, bevor sie an unsere Server gesendet werden.

Die folgende Tabelle enthält eine Liste der akzeptierten Stammwerte pro Sprache. Jedes verschachtelte Objekt kann Werte enthalten, die zu gültigem JSON führen (Strings, Integer, Floats, Booleans, Nulls usw.).

| Sprache    | Akzeptierte Stammwerte     |
| ---------- | -------------------------- |
| Ruby       | Arrays, Hashes             |
| JavaScript | Arrays, Objekte            |
| Elixir     | Lists, Maps                |
| Python     | Lists, Maps                |
| Go         | JSON-serialisierter String |
| Java       | JSON-serialisierter String |
| PHP        | Arrays, Objekte            |

Das untenstehende Codebeispiel zeigt, wie benutzerdefinierte Request-Parameter gesetzt werden:

<CodeGroup>
  ```ruby Ruby theme={null}
  # Werte werden auf der obersten Ebene zusammengeführt
  Appsignal.add_params(
    :post => {
      :title => "My title",
      :body => "Post text."
    }
  )
  Appsignal.add_params(:user => { :login => "some_name" })
  Appsignal.add_params(:user => { :id => 123 })
  # Parameter:
  # {
  #   :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}
  // Zusätzliches Setup ist erforderlich, um zuerst einen neuen Span abzurufen oder zu erstellen
  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}
  // Zusätzliches Setup ist erforderlich, um zuerst einen neuen Span abzurufen oder zu erstellen
  import io.opentelemetry.api.trace.Span;
  // Wir verwenden die Jackson-JSON-Bibliothek
  // Sie müssen sie möglicherweise als Abhängigkeit zu Ihrem Projekt hinzufügen
  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) {
      // Fehlerbehandlung hier hinzufügen
  }
  ```

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

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

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

Für bestimmte Sprachen ist zusätzliches Setup erforderlich.
Bitte folgen Sie den Anweisungen für diese Sprachen:

* [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" />

## Request-Payload-Daten

Das AppSignal-for-PHP-Paket und die durch unsere [OpenTelemetry-Beta](/opentelemetry) unterstützten Sprachen speichern die Request-Query-Parameter und Request-Payload-Daten separat.
Dieser Abschnitt beschreibt, wie die Request-Payload-Daten von POST-Anfragen gesetzt werden.

Sie können benutzerdefinierte Request-Payload-Daten an einem Span setzen.
Das Ändern der Request-Payload-Daten eines Spans überschreibt die durch die AppSignal-Instrumentierungen gesetzten Daten.

[Alle Parameter werden gefiltert](/guides/filter-data/filter-parameters) durch unsere Integrationen, bevor sie an unsere Server gesendet werden.

Die folgende Tabelle enthält eine Liste der akzeptierten Stammwerte pro Sprache. Jedes verschachtelte Objekt kann Werte enthalten, die zu gültigem JSON führen (Strings, Integer, Floats, Booleans, Nulls usw.).

| Sprache | Akzeptierte Stammwerte     |
| ------- | -------------------------- |
| Go      | JSON-serialisierter String |
| Java    | JSON-serialisierter String |
| PHP     | Arrays, Objekte            |

Das untenstehende Codebeispiel zeigt, wie benutzerdefinierte Request-Payload-Daten gesetzt werden:

<CodeGroup>
  ```go Go theme={null}
  // Zusätzliches Setup ist erforderlich, um zuerst einen neuen Span abzurufen oder zu erstellen
  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}
  // Zusätzliches Setup ist erforderlich, um zuerst einen neuen Span abzurufen oder zu erstellen
  import io.opentelemetry.api.trace.Span;
  // Wir verwenden die Jackson-JSON-Bibliothek
  // Sie müssen sie möglicherweise als Abhängigkeit zu Ihrem Projekt hinzufügen
  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) {
      // Fehlerbehandlung hier hinzufügen
  }
  ```

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

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

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

Für bestimmte Sprachen ist zusätzliches Setup erforderlich.
Bitte folgen Sie den Anweisungen für diese Sprachen:

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

## Einschränkungen

Wenn die Anwendung Request-Query-Parameter oder Request-Payload-Daten mehrmals setzt, führt das Ruby-Gem die Werte auf der Stammebene zusammen.
Für andere Integrationen wird nur der zuletzt gesetzte Wert gespeichert.
