Go Template Anleitung
Dieses Dokument beschreibt die Verwendung von Go Template in MCP Gateway zur Verarbeitung von Anfrage- und Antwortdaten. Go Template bietet leistungsstarke Template-Funktionen, die uns helfen, Daten flexibel zu transformieren und zu formatieren.
Grundlegende Syntax
Go Template verwendet {{}}
als Begrenzer, innerhalb derer verschiedene Funktionen und Variablen verwendet werden können. In MCP Gateway verwenden wir hauptsächlich die folgenden Variablen:
.Config
: Service-Level-Konfiguration.Args
: Anfrageparameter.Request
: Originale Anfrageinformationen.Response
: Upstream-Service-Antwortinformationen
Häufige Anwendungsfälle
1. Konfiguration aus Umgebungsvariablen abrufen
config:
Authorization: 'Bearer {{ env "AUTH_TOKEN" }}' # Konfiguration aus Umgebungsvariable abrufen
2. Werte aus Anfrage-Headern extrahieren
headers:
Authorization: "{{.Request.Headers.Authorization}}" # Authorization-Header des Clients weiterleiten
Cookie: "{{.Config.Cookie}}" # Wert aus der Service-Konfiguration verwenden
3. Anfrage-Body erstellen
requestBody: |-
{
"username": "{{.Args.username}}",
"email": "{{.Args.email}}"
}
4. Antwortdaten verarbeiten
responseBody: |-
{
"id": "{{.Response.Data.id}}",
"username": "{{.Response.Data.username}}",
"email": "{{.Response.Data.email}}",
"createdAt": "{{.Response.Data.createdAt}}"
}
5. Verschachtelte Antwortdaten verarbeiten
responseBody: |-
{
"id": "{{.Response.Data.id}}",
"username": "{{.Response.Data.username}}",
"email": "{{.Response.Data.email}}",
"createdAt": "{{.Response.Data.createdAt}}",
"preferences": {
"isPublic": {{.Response.Data.preferences.isPublic}},
"showEmail": {{.Response.Data.preferences.showEmail}},
"theme": "{{.Response.Data.preferences.theme}}",
"tags": {{.Response.Data.preferences.tags}}
}
}
6. Array-Daten verarbeiten
Bei der Verarbeitung von Array-Daten in Antworten können Sie die range-Funktionalität von Go Template verwenden:
responseBody: |-
{
"total": "{{.Response.Data.total}}",
"rows": [
{{- $len := len .Response.Data.rows -}}
{{- $rows := fromJSON .Response.Data.rows }}
{{- range $i, $e := $rows }}
{
"id": {{ $e.id }},
"detail": "{{ $e.detail }}",
"deviceName": "{{ $e.deviceName }}"
}{{ if lt (add $i 1) $len }},{{ end }}
{{- end }}
]
}
Dieses Beispiel zeigt:
- Verwendung der
fromJSON
-Funktion zum Konvertieren eines JSON-Strings in ein durchsuchbares Objekt - Verwendung von
range
zum Durchlaufen des Arrays - Verwendung der
len
-Funktion zum Abrufen der Array-Länge - Verwendung der
add
-Funktion für mathematische Operationen - Verwendung von bedingten Anweisungen zur Steuerung der Kommatrennung zwischen Array-Elementen
7. Parameter in URLs verwenden
endpoint: "http://localhost:5236/users/{{.Args.email}}/preferences"
8. Komplexe Objektdaten verarbeiten
Wenn Sie komplexe Strukturen wie Objekte oder Arrays in Anfragen oder Antworten in JSON umwandeln müssen, können Sie die Funktion toJSON
verwenden:
requestBody: |-
{
"isPublic": {{.Args.isPublic}},
"showEmail": {{.Args.showEmail}},
"theme": "{{.Args.theme}}",
"tags": {{.Args.tags}},
"settings": {{ toJSON .Args.settings }}
}
In diesem Fall ist settings
ein komplexes Objekt, das mit der Funktion toJSON
automatisch in einen JSON-String umgewandelt wird.
Eingebaute Funktionen
Aktuell unterstützte eingebaute Funktionen:
-
env
: Umgebungsvariablenwert abrufenAuthorization: 'Bearer {{ env "AUTH_TOKEN" }}'
-
add
: Ganzzahladdition durchführen{{ if lt (add $i 1) $len }},{{ end }}
-
fromJSON
: JSON-String in durchsuchbares Objekt konvertieren{{- $rows := fromJSON .Response.Data.rows }}
-
toJSON
: Objekt in JSON-String konvertieren"settings": {{ toJSON .Args.settings }}
Um neue Template-Funktionen hinzuzufügen:
- Spezifischen Anwendungsfall beschreiben und ein Issue erstellen
- PR-Beiträge sind willkommen, aber derzeit werden nur allgemeine Funktionen akzeptiert