ChatGPT API'si hızlı teslimat yapar, sık sık sözleşmeleri bozar ve testleriniz yanlış olsa bile jeton başına ücretlendirir. Akış yanıtları akışsız olanlardan farklı şekilde başarısız olur. Fonksiyon çağırma, modelin döndürdüğüyle her zaman eşleşmeyen bir JSON şeması katmanı ekler. Oran limitleri üretimde sessizce vururken, geliştirme konsolunuzda vurmaz. Tüm bunları bir Python REPL'de veya bir curl döngüsünde hata ayıklarsanız, para ve zaman harcarsınız.
Bu rehber, Apidog içinde eksiksiz ChatGPT API test iş akışını anlatır: kimlik doğrulama, ilk sohbet tamamlama, akış SSE, fonksiyon çağırma, hata yönetimi, oran limiti kontrolleri ve paralel ön uç çalışmaları için sahte yanıtlar. Sonunda, OpenAI sözleşme kaymalarını üretime geçmeden önce yakalayan yeniden kullanılabilir bir Apidog projeniz olacak.
Kısaca
- ChatGPT temel URL'si
https://api.openai.com/v1'i bir Apidog ortamı olarak ekleyin, API anahtarını gizli bir değişken olarak saklayın ve Klasör düzeyinde Taşıyıcı yetkilendirmeyi uygulayın. /chat/completionsisteğini bir kez oluşturun, kaydedin ve her model için (GPT-5.5, GPT-5.5 Pro, GPT-4o, o3) yeniden kullanın.- Apidog SSE akışını yerel olarak destekler, bu sayede yanıt panelinde her bir jetonun çıktısını ek bir araç kullanmadan görürsünüz.
- Fonksiyon çağırma, istek gövdesindeki basit bir
toolsdizisidir; Apidog, döndürülentool_callsJSON'unu şemanıza göre doğrular. - Ön ucunuz hazır olduğunda, OpenAI anahtar bütçeniz dolmadan Apidog içinde ChatGPT'yi taklit edin.
- Çalışan isteği, durum kodu,
choices[0].message.contentveusage.total_tokensüzerinde iddialarla bir test senaryosu olarak kaydedin. Her istem değişikliğinden önce CI'da çalıştırın.
ChatGPT API'sini neden test etmeli?
OpenAI'nin API yüzeyi kararlı görünüyor. Değil. Ocak 2024 ile şimdi arasında ekip şunları yayınladı veya değiştirdi:
function_call'dantool_calls'a (iki rakip şekil hala mevcut)- Araç şemaları için katı mod
temperaturevetop_pdüğmelerini kaldıran muhakeme modelleri (o1,o3)- Sürümleme ile
response_format: { type: "json_schema" } - Araç çağrıları için akış davranışı (deltalar parçalar halinde gelir, bunları birleştirmeniz gerekir)
/v1/chat/completionsile çakışan yeni bir/v1/responsesuç noktası
Bunlardan herhangi birini doğrudan uygulamanıza bağlar ve bir test katmanını atlarsanız, bir sonraki istem değişikliği PR'niz, kullanıcılar şikayet edene kadar göremeyeceğiniz bir regresyonu dağıtır. Apidog'daki bir istek koleksiyonu, kontrol ettiğiniz bir sözleşme sunar. Tam isteği tekrar oynatabilir, yanıtı karşılaştırabilir ve şekil değiştiğinde yüksek sesle hata verebilirsiniz.
Adım 1: OpenAI'yi Apidog'da bir ortam olarak ekleyin
Apidog'u açın ve yeni bir proje oluşturun. Proje içinde Ortam Yönetimi'ni (sağ üst açılır menü) açın ve OpenAI Prod adında bir ortam ekleyin:
| Değişken | Değer |
|---|---|
baseUrl |
https://api.openai.com/v1 |
OPENAI_API_KEY |
sk-proj-... (Gizli olarak sakla) |
defaultModel |
gpt-5.5 |
OPENAI_API_KEY'i gizli olarak işaretleyin, böylece paylaşılan çalışma alanlarında maskelenir ve dışa aktarılan koleksiyonlara asla yazılmaz. Apidog sırları kullanıcı başına saklar, bu nedenle projeyi çeken bir ekip arkadaşı değişken adını görecek ancak kendi anahtarını sağlayacaktır.
Adım 2: Klasör düzeyinde Taşıyıcı yetkilendirmeyi ayarlayın
Proje içinde ChatGPT adında bir klasör oluşturun. Klasör ayarlarını açın, Kimlik Doğrulama'ya gidin, Taşıyıcı Belirteci'ni seçin ve {{OPENAI_API_KEY}}'i yapıştırın. Klasör içindeki her istek bu başlığı miras alır. Artık her isteğe Authorization: Bearer sk-... yapıştırmayı bırakırsınız ve anahtar rotasyonu tek bir düzenlemedir.
Bu, Apidog'u ham bir curl iş akışından daha hızlı yapan küçük bir ayrıntıdır: kimlik doğrulama tek bir yerde yaşar, istek gövdeleri temiz kalır.
Adım 3: İlk sohbet tamamlama isteğini oluşturun
ChatGPT klasörünün içinde yeni bir istek oluşturun:
- Yöntem:
POST - URL:
{{baseUrl}}/chat/completions - Gövde (JSON):
{
"model": "{{defaultModel}}",
"messages": [
{ "role": "system", "content": "Sen kıdemli bir arka uç mühendisisin. 100 kelimenin altında yanıtla." },
{ "role": "user", "content": "Idempotent ve güvenli HTTP yöntemleri arasındaki fark nedir?" }
],
"temperature": 0.2
}
Gönder'e tıklayın. Yanıt olarak 200 durumu, cevabı içeren bir choices[0].message.content alanı ve jeton sayılarını gösteren bir usage bloğu almalısınız. İsteği chat-completion-basic olarak kaydedin.
Eğer 401 alırsanız, anahtarınız yüklenmemiştir. Sağ üstteki ortam açılır menüsünün OpenAI Prod olarak ayarlandığını kontrol edin. Eğer 429 alırsanız, bir oran limitine takılmışsınızdır; bir sonraki adım bunu kapsar.
Adım 4: Akış yanıtlarını test edin (SSE)
Akış, çoğu ChatGPT entegrasyonunun bozulduğu yerdir. Yanıt text/event-stream'dir, JSON değil, ve her parça kısmi bir delta içeren bir data: {...} satırıdır. Apidog SSE'yi yerel olarak konuşur.
chat-completion-basic'i kopyalayın, adını chat-completion-stream olarak değiştirin ve gövdeye "stream": true ekleyin:
{
"model": "{{defaultModel}}",
"stream": true,
"messages": [
{ "role": "user", "content": "İlk 100 asal sayıyı virgülle ayırarak akışla gönder." }
]
}
Gönder'e tıklayın. Yanıt paneli akış görünümüne geçer ve her data: parçasını geldiği gibi işler. Yalnızca birleştirilmiş metni değil, gerçek SSE çerçevelerini görürsünüz. Bozuk bir deltada veya eksik bir [DONE] sonlandırıcısında hata ayıklarken ihtiyacınız olan görünüm budur.
Nelere dikkat etmeli:
- Son çerçeve tam olarak
data: [DONE]dizesidir. Eğer istemciniz bunu işleyemezse, bir JSON ayrıştırma hatası verir. "stream_options": { "include_usage": true }geçirmezsenizusageakış yanıtlarında bulunmaz. Faturalandırma ardışık düzeniniz çağrı başına jeton sayısına bağlıysa bunu ekleyin.- Araç çağrısı deltaları parça parça gelir:
index, sonraid, sonrafunction.name, sonra karakter karakter birikenfunction.arguments. Bunu açıkça test edin.
Adım 5: Fonksiyon çağırma ve araç kullanımını test edin
Fonksiyon çağırma, istem değişikliklerinin alt akış kodunu sessizce bozduğu en yaygın yerdir. Model bir tool_calls dizisi döndürür; sizin işiniz, argümanların kaydettiğiniz JSON Şeması olarak ayrıştırıldığını doğrulamaktır.
Bu gövdeyle chat-completion-tools adlı bir istek oluşturun:
{
"model": "{{defaultModel}}",
"messages": [
{ "role": "user", "content": "Singapur'da hava şu an nasıl?" }
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Bir şehir için mevcut hava durumunu al.",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string" },
"unit": { "type": "string", "enum": ["c", "f"] }
},
"required": ["city"]
},
"strict": true
}
}
],
"tool_choice": "auto"
}
Doğru bir yanıt, choices[0].message.tool_calls[0].function.name === "get_weather" içermeli ve function.arguments, { "city": "Singapore", "unit": "c" } (veya benzeri) olarak ayrıştırılan bir JSON dizesi olmalıdır.
İsteğin Testler sekmesinde şunları ekleyin:
pm.test("Araç çağrıldı", () => {
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("Argümanlar geçerli JSON olarak ayrıştırılıyor", () => {
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");
});
Çalıştırın. Yeşil testler artık sizin sözleşmenizdir. OpenAI şekli değiştirdiğinde, üretim trafiğinizden önce test kırmızıya dönecektir.
Adım 6: Hataları ve oran limitlerini açıkça ele alın
Üretim ChatGPT entegrasyonları beş öngörülebilir şekilde başarısız olur. Her biri için bir istek oluşturun ve beklenen davranışı doğrulayın:
| Senaryo | Nasıl tetiklenir | Beklenen |
|---|---|---|
| Geçersiz anahtar | OPENAI_API_KEY'i bir Sandbox ortamında sk-bad olarak ayarla |
401 ve error.code = "invalid_api_key" |
| Oran limiti | Apidog'un koleksiyon çalıştırıcısında isteği 200 kez döngüye sokun | 429 ve Retry-After başlığı |
| Jeton limiti aşıldı | 128K bağlamlı bir modele 200K jetonluk bir istem gönderin | 400 ve error.code = "context_length_exceeded" |
| Kötü model adı | "model": "gpt-99" |
404 |
| Şema ihlali | strict: true ve hatalı bir giriş ile araç çağrısı |
Model aracı reddeder, düz metin döndürür |
Testler sekmesine iddialar ekleyin, böylece bir regresyon sessiz bir yeniden deneme fırtınası yerine kırmızı bir test olarak görünür. Retry-After başlığı, çoğu üretim kodunun yanlış anladığı şeydir. Saniye cinsindendir, bazen kesirli bir değerdir ve bir geri çekmeyi sabit kodlamak yerine onu okumalısınız.
Adım 7: Paralel ön uç geliştirme için ChatGPT'yi taklit edin
OpenAI anahtarınızın aylık bir limiti vardır. Ön uç ekibinizin yoktur. Kullanıcı arayüzünün, arka uç istemi sonuçlandırılmadan önce akışlı jetonları, önerilen takipleri ve araç çağrısı kartlarını oluşturması gerektiğinde, onlara bir Apidog mock verin.
ChatGPT klasöründe, chat-completion-basic isteğine sağ tıklayın, Akıllı Mock'u seçin ve etkinleştirin. Apidog, OpenAI şemasına uygun sentetik bir yanıt döndürür: id, object, created, model, choices, usage. Mock URL'si https://mock.apidog.com/m1/<projectId>/chat/completions gibi görünür ve aynı gövdeyi kabul eder.
Akışlı taklitler için, Gelişmiş Mock sekmesinde 50ms aralıklarla data: { ... }\n\n parçalarını yazan bir betik tanımlayın. Ön uç, herhangi bir OpenAI trafiği olmadan gerçekçi bir SSE akışı alır.
Gerçek istem geldiğinde, ön ucun temel URL'sini tekrar https://api.openai.com/v1 olarak çevirin. Başka hiçbir şey değişmez.
Adım 8: Paketi bir CI test senaryosu olarak kaydedin
Apidog'un Test Senaryoları, iddialarla istekleri zincirlemenize ve bunları başsız çalıştırmanıza olanak tanır. Şunları yapan bir senaryo oluşturun:
chat-completion-basic'i çağırır,status === 200veusage.total_tokens > 0olduğunu doğrular.chat-completion-stream'i çağırır, SSE'nin[DONE]ile bittiğini doğrular.chat-completion-tools'u çağırır, araç çağrısı şemasının doğrulandığını doğrular.- Adım 6'daki her hata senaryosunu çağırır, doğru durum kodunu doğrular.
Senaryoyu dışa aktarın ve CI'da apidog-cli run scenario.json --env OpenAI Prod komutuyla çalıştırın. İstemlerinizi tutan dosya için PR işlem hattına bağlayın. Her istem değişikliği artık bir ön birleştirme kontrolü olarak canlı OpenAI API'sine karşı çalışır. Maliyet: CI çalıştırması başına birkaç kuruş. Değer: istem regresyonlarını dağıtmayı bırakırsınız.
Sıkça Sorulan Sorular
Bu Azure OpenAI ile çalışır mı? Evet. baseUrl'yi Azure kaynak URL'nizle değiştirin, api-version sorgu parametresini ekleyin ve yetkilendirmeyi Bearer'dan api-key başlığına çevirin. İstek gövdeleri aynıdır.
Bunu o1 ve o3 muhakeme modelleri için kullanabilir miyim? Evet, ancak bu modeller temperature, top_p, presence_penalty ve frequency_penalty'yi reddeder. Kısaltılmış bir gövde şablonuyla ayrı bir Reasoning klasörü oluşturun.
Apidog içinde istemleri nasıl sürümleyebilirim? Apidog dal desteğine sahiptir. Her istem deneyi için bir dal oluşturun, canlı API'ye karşı test senaryosunu çalıştırın, jeton kullanımını ve yanıt kalitesini karşılaştırın, sonra birleştirin. Bu, kod için olduğu gibi istemler için de aynı iş akışıdır.
Yeni /v1/responses uç noktası ne olacak? Bunun için ayrı bir klasör oluşturun. Kimlik doğrulama ve temel URL aynıdır; sadece gövde şekli farklıdır. Aynı istemlere karşı A/B testi yapabilmek için her iki klasörü de tutun.
Apidog API çağrısı başına ücret alır mı? Hayır. Apidog istemcisi bireysel kullanım ve çoğu ekip kullanımı için ücretsizdir. OpenAI jeton başına ücret alır; Apidog sizinle OpenAI arasına girmez.
Özet
ChatGPT API'si değişmeye devam edecek. Akış yeni şekillerde bozulacak, araç şemaları daha katı hale gelecek ve muhakeme modelleri kararlı olduğunu düşündüğünüz parametreleri kaldırmaya devam edecek. Savunma, kontrol ettiğiniz bir istek koleksiyonu, ön ucunuzun güvenebileceği bir mock sunucu ve her istem PR'sinden önce CI'nızın çalıştırdığı bir test senaryosudur.
Apidog'u indirin ve mevcut OpenAI çağrılarınızı içe aktarın. Postman koleksiyonları ve curl komutları tek tıklamayla dönüştürülür. Yukarıdaki sekiz isteği bir kez oluşturun ve gelecekteki her ChatGPT güncellemesi, bir üretim olayı yerine kontrollü bir test çalıştırması haline gelir.
