Ana içeriğe geç
Kesit SQL
Orta · BT İş Analizi

API sözleşmesini okumak (API contract): REST, JSON, durum kodları, idempotency, hata durumları

Bir iş analisti için REST ve JSON, durum kodları, aynı isteğin tekrarı, hata senaryoları ve API alanlarını tablolara eşlemek.

Uygulamada aç, 10 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Kupon servisi, sipariş servisi ve bildirim servisi birbirini API (application programming interface) üzerinden çağırır. Sözleşmeyi (contract) geliştirici yazar, sen okursun: yazdığın kural sözleşmede bir yere oturuyor mu? Bu tarayıcıda gerçek bir servis çalışmıyor; bu ders okumaya ve çıkan veriyi SQL ile doğrulamaya dayanır.

REST'in dört fiili

Fiil (verb)Ne yapar?Kupon örneği
GETOkur, hiçbir şey değiştirmezGET /musteriler/162/kuponlar
POSTYeni kayıt ya da işlem başlatırPOST /kuponlar
PUT / PATCHGünceller (tamamını / bir kısmını)PATCH /kuponlar/88 ile kullanım zamanı
DELETESiler ya da pasifleştirirDELETE /kuponlar/88

İstek ve cevap

JSON, anahtar-değer çiftlerinden oluşan metin biçimidir. Aşağıdaki sözleşme parçasını oku:

POST /kuponlar
Idempotency-Key: siparis-5045

{
  "order_id": 5045,
  "neden": "gec_teslim"
}

201 Created
{
  "kupon_id": 88,
  "order_id": 5045,
  "customer_id": 162,
  "tutar": 30.00,
  "para_birimi": "TRY",
  "son_kullanim": "2025-01-07T14:01:48+03:00"
}

Okurken soracakların: Tutarı kim hesaplıyor, çağıran mı, servis mi? (Burada servis; iyi, kural tek yerde kalır.) Saat dilimi yazıyor mu? (Evet, +03:00.) Tutar sayı mı, metin mi? son_kullanim bir iş kuralı getirdi: 30 gün mü, bu BRD'de yazıyor mu?

Durum kodları

KodAnlamıKuponda ne zaman?
200 OKİstek başarılıAynı istek ikinci kez geldi, mevcut kupon döndü
201 CreatedYeni kayıt oluştuKupon ilk kez üretildi
400 Bad Requestİstek biçimi bozukorder_id metin geldi
401 / 403Kimlik yok / yetki yokÇağıran servisin izni yok
404 Not FoundKayıt yokBöyle bir sipariş yok
409 ConflictMevcut durumla çakışıyorAynı siparişe farklı anahtarla ikinci kupon
422 Unprocessable ContentBiçim doğru, iş kuralı uymuyorSipariş iptal, kupon verilemez
500 / 503Sunucu tarafı hataVeritabanı yanıt vermedi; yeniden denenebilir

Sınır çizgisi ekipten ekibe değişir: bazı ekipler iş kuralı ihlalini 400 ile döner. Önemli olan her hata senaryosunun sözleşmede yazılı olması ve aynı anlamda kullanılmasıdır.

Idempotency

Ağ kopar, çağıran taraf cevabı alamadığı için isteği tekrarlar. Servis ikinci kupon üretirse şirket para kaybeder. Idempotent işlem, kaç kez çalışırsa çalışsın sonucu aynı olan işlemdir. GET doğası gereği böyledir; POST için özel önlem gerekir: Idempotency-Key başlığı ya da tablodaki UNIQUE kısıtı. Gereksinim cümlesi: “Aynı sipariş için tekrarlanan istek yeni kupon üretmez, ilk kuponu döner.”

Hata durumları tablosu

DurumÇağıran ne yapar?Müşteri ne görür?
Kupon servisi 5 saniyede cevap vermediEn çok 3 kez yeniden denerHiçbir şey; kupon sonra gelir
3 denemede de 500Kaydı hata kuyruğuna yazarOperasyon inceler, sonra kupon gelir
422 (kural dışı)Yeniden denemez, loglarKupon yok

Yeniden denenecek ve denenmeyecek hataları ayırmak iş kararıdır. Sayıları (3 deneme, 5 saniye) burada önerdik, senin projende ekip belirler.

API'yi tablolara eşle

API alanıTablo ve sütunNot
order_idlk_orders.order_idİstekle gelir, varlığı kontrol edilir
customer_idlk_orders.customer_idİstekle gelmez, siparişten bulunur
tutarhesaplanır, ba_kupon.tutarKarar tablosundan
son_kullanimkaynak yokAçık soru: tabloda alan yok, süre için karar gerekli (Canlıya geçiş dersindeki mini BRD bunu 30 gün olarak kapatır)

Son satır sözleşmeyi okumanın kazancıdır: API'de olan alanın tabloda karşılığı yok. Bunu geliştirme başlamadan yakalamak ucuzdur. Gerçek API'lerle Python'dan çalışmak istersen Kesit Python'daki BT İş Analisti yolunda HTTP dersi var.

Alıştırmalara geç (10)