Die ChatGPT API wird schnell weiterentwickelt, bricht oft Verträge und rechnet pro Token ab, selbst wenn Ihre Tests fehlschlagen. Streaming-Antworten schlagen anders fehl als Nicht-Streaming-Antworten. Funktionsaufrufe fügen eine JSON-Schema-Ebene hinzu, die nicht immer mit dem übereinstimmt, was das Modell zurückgibt. Ratenbegrenzungen treten in der Produktion stillschweigend auf und nicht in Ihrer Entwicklerkonsole. Wenn Sie all dies in einer Python REPL oder einer curl-Schleife debuggen, verschwenden Sie Geld und Zeit.
Dieser Leitfaden führt Sie durch den vollständigen ChatGPT API-Test-Workflow in Apidog: Authentifizierung, die erste Chat-Vervollständigung, Streaming SSE, Funktionsaufrufe, Fehlerbehandlung, Ratenbegrenzungsprüfungen und simulierte Antworten für parallele Frontend-Arbeit. Am Ende werden Sie ein wiederverwendbares Apidog-Projekt haben, das OpenAI-Vertragsabweichungen erkennt, bevor sie die Produktion erreichen.
Das Wichtigste in Kürze
- Fügen Sie die ChatGPT-Basis-URL
https://api.openai.com/v1als Apidog-Umgebung hinzu, speichern Sie den API-Schlüssel als geheime Variable und wenden Sie die Bearer-Authentifizierung auf Ordnerebene an. - Erstellen Sie die
/chat/completions-Anfrage einmal, speichern Sie sie und verwenden Sie sie für jedes Modell wieder (GPT-5.5, GPT-5.5 Pro, GPT-4o, o3). - Apidog verarbeitet SSE-Streaming nativ, sodass Sie eine Token-für-Token-Ausgabe im Antwortfeld ohne zusätzliche Tools sehen.
- Funktionsaufrufe sind lediglich ein
tools-Array im Anfragetext; Apidog validiert das zurückgegebenetool_calls-JSON anhand Ihres Schemas. - Simulieren Sie ChatGPT in Apidog, wenn Ihr Frontend bereit ist, bevor Ihr OpenAI-Schlüsselbudget aufgebraucht ist.
- Speichern Sie die funktionierende Anfrage als Testszenario mit Assertionen für den Statuscode,
choices[0].message.contentundusage.total_tokens. Führen Sie sie in CI vor jeder Prompt-Änderung aus.
Warum die ChatGPT API überhaupt testen?
Die API-Oberfläche von OpenAI sieht stabil aus. Das ist sie aber nicht. Zwischen Januar 2024 und heute hat das Team Folgendes veröffentlicht oder geändert:
function_callzutool_calls(zwei konkurrierende Formen sind immer noch in Gebrauch)- Strenger Modus für Tool-Schemas
- Argumentationsmodelle (
o1,o3), die die Parametertemperatureundtop_pweglassen response_format: { type: "json_schema" }mit Versionierung- Streaming-Verhalten für Tool-Aufrufe (Deltas kommen in Teilen, Sie müssen sie zusammensetzen)
- Ein neuer Endpunkt
/v1/responses, der sich mit/v1/chat/completionsüberschneidet
Wenn Sie dies direkt in Ihre Anwendung integrieren und eine Testschicht überspringen, liefert Ihr nächster Prompt-Änderungs-PR eine Regression, die Sie erst bemerken werden, wenn sich Benutzer beschweren. Eine Anfragesammlung in Apidog gibt Ihnen einen Vertrag, den Sie kontrollieren. Sie können die genaue Anfrage wiederholen, die Antwort abgleichen und lautstark scheitern, wenn sich die Struktur ändert.
Schritt 1: OpenAI als Umgebung in Apidog hinzufügen
Öffnen Sie Apidog und erstellen Sie ein neues Projekt. Innerhalb des Projekts öffnen Sie die Umgebungsverwaltung (Dropdown oben rechts) und fügen eine Umgebung namens OpenAI Prod hinzu:
| Variable | Wert |
|---|---|
baseUrl |
https://api.openai.com/v1 |
OPENAI_API_KEY |
sk-proj-... (als Geheimnis speichern) |
defaultModel |
gpt-5.5 |
Markieren Sie OPENAI_API_KEY als Geheimnis, damit es in gemeinsamen Arbeitsbereichen maskiert und niemals in exportierte Sammlungen geschrieben wird. Apidog speichert Geheimnisse pro Benutzer, sodass ein Teamkollege, der das Projekt zieht, den Variablennamen sieht, aber seinen eigenen Schlüssel bereitstellen muss.
Schritt 2: Bearer-Authentifizierung auf Ordnerebene festlegen
Erstellen Sie einen Ordner namens ChatGPT innerhalb des Projekts. Öffnen Sie die Ordnereinstellungen, gehen Sie zu Authentifizierung, wählen Sie Bearer Token und fügen Sie {{OPENAI_API_KEY}} ein. Jede Anfrage innerhalb des Ordners erbt diesen Header. Sie müssen nicht mehr Authorization: Bearer sk-... in jede Anfrage einfügen, und die Schlüsselrotation ist eine einmalige Bearbeitung.
Dies ist das kleine Detail, das Apidog schneller macht als ein roher curl-Workflow: Authentifizierung lebt an einem Ort, Anfragetexte bleiben sauber.
Schritt 3: Die erste Chat-Vervollständigungsanfrage erstellen
Erstellen Sie im Ordner ChatGPT eine neue Anfrage:
- Methode:
POST - URL:
{{baseUrl}}/chat/completions - Text (JSON):
{
"model": "{{defaultModel}}",
"messages": [
{ "role": "system", "content": "You are a senior backend engineer. Answer in under 100 words." },
{ "role": "user", "content": "What's the difference between idempotent and safe HTTP methods?" }
],
"temperature": 0.2
}
Klicken Sie auf Senden. Sie sollten eine 200 mit einem Feld choices[0].message.content, das die Antwort enthält, und einem usage-Block mit Token-Zählungen zurückerhalten. Speichern Sie die Anfrage als chat-completion-basic.
Wenn Sie 401 erhalten, wurde Ihr Schlüssel nicht geladen. Überprüfen Sie, ob das Umgebungs-Dropdown oben rechts auf OpenAI Prod eingestellt ist. Wenn Sie 429 erhalten, haben Sie eine Ratenbegrenzung erreicht, was der nächste Schritt behandelt.
Schritt 4: Streaming-Antworten (SSE) testen
Streaming ist der Punkt, an dem die meisten ChatGPT-Integrationen versagen. Die Antwort ist text/event-stream, nicht JSON, und jeder Chunk ist eine data: {...}-Zeile mit einem partiellen delta. Apidog unterstützt SSE nativ.
Duplizieren Sie chat-completion-basic, benennen Sie es in chat-completion-stream um und fügen Sie `"stream": true` zum Text hinzu:
{
"model": "{{defaultModel}}",
"stream": true,
"messages": [
{ "role": "user", "content": "Stream the first 100 prime numbers, comma-separated." }
]
}
Klicken Sie auf Senden. Das Antwortfeld wechselt zur Streaming-Ansicht und rendert jeden data:-Chunk, sobald er ankommt. Sie sehen die eigentlichen SSE-Frames, nicht nur den zusammengesetzten Text. Das ist die Ansicht, die Sie benötigen, wenn Sie ein fehlerhaftes Delta oder einen fehlenden [DONE]-Terminator debuggen.
Worauf Sie achten sollten:
- Der letzte Frame ist die Zeichenkette
data: [DONE]. Wenn Ihr Client dies nicht verarbeitet, wird ein JSON-Analysefehler ausgelöst. usageist in Streaming-Antworten nicht enthalten, es sei denn, Sie übergeben `"stream_options": { "include_usage": true }`. Fügen Sie es hinzu, wenn Ihre Abrechnungspipeline von den Token-Zählungen pro Aufruf abhängt.- Tool-Call-Deltas kommen in Teilen an:
index, dannid, dannfunction.name, dannfunction.argumentsZeichen für Zeichen akkumuliert. Testen Sie dies explizit.
Schritt 5: Funktionsaufrufe und Tool-Nutzung testen
Funktionsaufrufe sind der häufigste Bereich, in dem Prompt-Änderungen stillschweigend nachgelagerten Code unterbrechen. Das Modell gibt ein tool_calls-Array zurück; Ihre Aufgabe ist es, zu validieren, dass die Argumente gemäß dem von Ihnen registrierten JSON-Schema geparst werden.
Erstellen Sie eine Anfrage chat-completion-tools mit diesem Text:
{
"model": "{{defaultModel}}",
"messages": [
{ "role": "user", "content": "What is the weather in Singapore right now?" }
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a city.",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string" },
"unit": { "type": "string", "enum": ["c", "f"] }
},
"required": ["city"]
},
"strict": true
}
}
],
"tool_choice": "auto"
}
Eine korrekte Antwort hat choices[0].message.tool_calls[0].function.name === "get_weather" und function.arguments ist ein JSON-String, der zu { "city": "Singapore", "unit": "c" } (oder Ähnlichem) geparst wird.
Fügen Sie im Reiter Tests der Anfrage Folgendes hinzu:
pm.test("Tool was called", () => {
const body = pm.response.json();
const call = body.choices[0].message.tool_calls?.[0];
pm.expect(call?.function?.name).to.eql("get_weather");
});
pm.test("Arguments parse as valid JSON", () => {
const body = pm.response.json();
const args = JSON.parse(body.choices[0].message.tool_calls[0].function.arguments);
pm.expect(args.city).to.be.a("string");
});
Führen Sie es aus. Die grünen Tests sind jetzt Ihr Vertrag. Wenn OpenAI die Struktur ändert, wird der Test rot, bevor Ihr Produktionsverkehr betroffen ist.
Schritt 6: Fehler und Ratenbegrenzungen explizit behandeln
ChatGPT-Integrationen in der Produktion schlagen auf fünf vorhersehbare Weisen fehl. Erstellen Sie für jeden Fall eine Anfrage und überprüfen Sie das erwartete Verhalten:
| Szenario | Wie auslösen | Erwartet |
|---|---|---|
| Ungültiger Schlüssel | Setzen Sie OPENAI_API_KEY auf sk-bad in einer Sandbox-Umgebung |
401 mit error.code = "invalid_api_key" |
| Ratenbegrenzung | Wiederholen Sie die Anfrage 200x im Collection Runner von Apidog | 429 mit Retry-After Header |
| Token-Limit überschritten | Senden Sie einen 200K-Token-Prompt an ein 128K-Kontextmodell | 400 mit error.code = "context_length_exceeded" |
| Ungültiger Modellname | "model": "gpt-99" |
404 |
| Schemaverletzung | Tool-Aufruf mit strict: true und fehlerhafter Eingabe |
Das Modell lehnt das Tool ab, gibt Klartext zurück |
Fügen Sie Assertionen im Reiter Tests hinzu, damit eine Regression als roter Test und nicht als stiller Wiederholungssturm angezeigt wird. Der Retry-After-Header ist der, bei dem die meisten Produktionscodes Fehler machen. Er ist in Sekunden angegeben, manchmal als Bruchwert, und Sie sollten ihn lesen, anstatt einen festen Backoff zu programmieren.
Schritt 7: ChatGPT für parallele Frontend-Entwicklung simulieren
Ihr OpenAI-Schlüssel hat ein monatliches Limit. Ihr Frontend-Team nicht. Wenn die Benutzeroberfläche gestreamte Token, vorgeschlagene Folgefragen und Tool-Call-Karten rendern muss, bevor der Backend-Prompt fertiggestellt ist, geben Sie ihnen einen Apidog-Mock.
Klicken Sie im Ordner ChatGPT mit der rechten Maustaste auf die Anfrage chat-completion-basic, wählen Sie Smart Mock und aktivieren Sie es. Apidog gibt eine synthetische Antwort zurück, die dem OpenAI-Schema entspricht: id, object, created, model, choices, usage. Die Mock-URL sieht wie https://mock.apidog.com/m1/<projectId>/chat/completions aus und akzeptiert denselben Text.
Für Streaming-Mocks definieren Sie ein Skript im Reiter Erweiterter Mock, das data: { ... }\n\n-Chunks in einem Intervall von 50 ms schreibt. Das Frontend erhält einen realistischen SSE-Stream ohne OpenAI-Traffic.
Wenn der echte Prompt landet, setzen Sie die Basis-URL des Frontends wieder auf https://api.openai.com/v1 zurück. Nichts anderes ändert sich.
Schritt 8: Die Suite als CI-Testszenario speichern
Die Testszenarien von Apidog ermöglichen es Ihnen, Anfragen mit Assertionen zu verketten und sie headless auszuführen. Erstellen Sie ein Szenario, das:
- Ruft
chat-completion-basicauf, überprüft, obstatus === 200undusage.total_tokens > 0ist. - Ruft
chat-completion-streamauf, überprüft, ob das SSE mit[DONE]abgeschlossen wurde. - Ruft
chat-completion-toolsauf, überprüft, ob das Tool-Call-Schema validiert wird. - Ruft jedes Fehlerszenario aus Schritt 6 auf, überprüft den korrekten Statuscode.
Exportieren Sie das Szenario und führen Sie es in CI über apidog-cli run scenario.json --env OpenAI Prod aus. Integrieren Sie es in die PR-Pipeline für die Datei, die Ihre Prompts enthält. Jede Prompt-Änderung wird nun als Vorab-Merge-Prüfung gegen die Live-OpenAI-API ausgeführt. Kosten: ein paar Cent pro CI-Lauf. Wert: Sie hören auf, Prompt-Regressionen zu veröffentlichen.
FAQ
Funktioniert dies mit Azure OpenAI? Ja. Tauschen Sie baseUrl gegen Ihre Azure-Ressourcen-URL aus, fügen Sie den Abfrageparameter api-version hinzu und ändern Sie die Authentifizierung von Bearer auf den api-key-Header. Die Anfragetexte sind identisch.
Kann ich dies für o1- und o3-Argumentationsmodelle verwenden? Ja, aber diese Modelle lehnen temperature, top_p, presence_penalty und frequency_penalty ab. Erstellen Sie einen separaten Ordner Reasoning mit einem reduzierten Body-Template.
Wie versioniere ich Prompts in Apidog? Apidog unterstützt Branches. Erstellen Sie einen Branch pro Prompt-Experiment, führen Sie das Testszenario gegen die Live-API aus, vergleichen Sie die Token-Nutzung und die Antwortqualität und führen Sie dann den Merge durch. Es ist derselbe Workflow wie bei Code, angewendet auf Prompts.
Was ist mit dem neuen Endpunkt /v1/responses? Richten Sie einen separaten Ordner dafür ein. Die Authentifizierung und die Basis-URL sind identisch; nur die Body-Struktur unterscheidet sich. Behalten Sie beide Ordner, damit Sie sie mit denselben Prompts A/B-testen können.
Berechnet Apidog pro API-Aufruf? Nein. Der Apidog-Client ist für die individuelle Nutzung und die meisten Team-Nutzungen kostenlos. OpenAI berechnet pro Token; Apidog schaltet sich nicht zwischen Sie und OpenAI.
Zusammenfassung
Die ChatGPT API wird sich ständig ändern. Streaming wird auf neue Arten fehlschlagen, Tool-Schemas werden strenger werden, und Argumentationsmodelle werden weiterhin Parameter weglassen, die Sie für stabil hielten. Die Verteidigung ist eine Anfragesammlung, die Sie kontrollieren, ein Mock-Server, auf den sich Ihr Frontend stützen kann, und ein Testszenario, das Ihr CI vor jedem Prompt-PR ausführt.
Laden Sie Apidog herunter und importieren Sie Ihre bestehenden OpenAI-Aufrufe. Postman-Sammlungen und curl-Befehle lassen sich beide mit einem Klick konvertieren. Erstellen Sie die acht oben genannten Anfragen einmal, und jedes zukünftige ChatGPT-Update wird zu einem kontrollierten Testlauf anstelle eines Produktionsvorfalls.
