
Bir API'ye istek yaparken sadece URL yetmez. Aynı URL'e farklı metodlarla istek yapabilirsiniz ve her biri tamamen farklı bir işlem yapar. Bu metodlara HTTP Verb (HTTP Fiilleri) denir.
Bu makalede HTTP metodlarının ne olduğunu, ne zaman hangisinin kullanıldığını ve aralarındaki farkları öğreneceksiniz.
HTTP Metodu Nedir?
HTTP metodu, sunucuya ne yapmak istediğinizi söyler. Aynı kapıyı (URL) çalsanız bile, farklı bir şey isteyebilirsiniz:
- "Bu veriyi görmek istiyorum" → GET
- "Yeni veri oluşturmak istiyorum" → POST
- "Bu veriyi güncellemek istiyorum" → PUT / PATCH
- "Bu veriyi silmek istiyorum" → DELETE
Aynı URL, Farklı Metodlar
Bir kitap API'si düşünelim:
| Metod | URL | Ne Yapar |
|---|---|---|
| GET | /kitaplar | Tüm kitapları listeler |
| POST | /kitaplar | Yeni kitap ekler |
| GET | /kitaplar/5 | 5 numaralı kitabı getirir |
| PUT | /kitaplar/5 | 5 numaralı kitabı günceller |
| DELETE | /kitaplar/5 | 5 numaralı kitabı siler |
Dikkat edin: /kitaplar/5 URL'i aynı, ama metoda göre işlem tamamen değişiyor.
Temel HTTP Metodları
1. GET - Veri Almak
Amaç: Sunucudan veri istemek, okumak.
Özellikleri:
- En sık kullanılan metod
- Sunucuda hiçbir şeyi değiştirmez
- Sadece veri okur
- Tarayıcıda URL'e gittiğinizde GET isteği yapılır
Örnekler:
GET /urunler → Tüm ürünleri getir
GET /urunler/42 → 42 numaralı ürünü getir
GET /kullanicilar/ahmet → "ahmet" kullanıcısının profilini getir
GET /haberler?kategori=spor → Spor haberlerini getirGerçek Hayat Benzetmesi: Kütüphaneye gidip "Şu kitabı görebilir miyim?" demek. Kitabı alıp okuyorsunuz ama kütüphanede hiçbir şey değişmiyor.
2. POST - Yeni Veri Oluşturmak
Amaç: Sunucuya yeni veri göndermek, kayıt oluşturmak.
Özellikleri:
- Sunucuda yeni kayıt oluşturur
- İstek gövdesinde (body) veri gönderilir
- Form göndermek POST isteğidir
- Başarılı olursa genellikle 201 (Created) döner
Örnekler:
POST /urunler
Body: { "ad": "Laptop", "fiyat": 15000 }
→ Yeni ürün oluşturur
POST /kullanicilar
Body: { "isim": "Ayşe", "email": "ayse@mail.com" }
→ Yeni kullanıcı kaydeder
POST /siparisler
Body: { "urunId": 42, "adet": 2 }
→ Yeni sipariş oluştururGerçek Hayat Benzetmesi: Kütüphaneye yeni bir kitap bağışlamak. Kütüphanedeki kitap sayısı artıyor.
3. PUT - Veriyi Tamamen Güncellemek
Amaç: Var olan bir kaydı tamamen yeni verilerle değiştirmek.
Özellikleri:
- Mevcut kaydın tamamını günceller
- Gönderilmeyen alanlar silinir veya varsayılana döner
- Kaynak yoksa bazen oluşturabilir (API'ye bağlı)
Örnek:
Mevcut ürün:
{
"id": 5,
"ad": "Mouse",
"fiyat": 150,
"renk": "siyah",
"stok": 50
}PUT isteği:
PUT /urunler/5
Body: { "ad": "Gaming Mouse", "fiyat": 250 }Sonuç:
{
"id": 5,
"ad": "Gaming Mouse",
"fiyat": 250,
"renk": null,
"stok": null
}Dikkat: renk ve stok değerleri kayboldu çünkü PUT isteğinde gönderilmedi.
Gerçek Hayat Benzetmesi: Bir Word belgesini tamamen silip sıfırdan yazmak.
4. PATCH - Veriyi Kısmen Güncellemek
Amaç: Var olan bir kaydın sadece belirli alanlarını güncellemek.
Özellikleri:
- Sadece gönderilen alanları günceller
- Diğer alanlar olduğu gibi kalır
- PUT'tan daha verimli (daha az veri gönderilir)
Örnek:
Mevcut ürün:
{
"id": 5,
"ad": "Mouse",
"fiyat": 150,
"renk": "siyah",
"stok": 50
}PATCH isteği:
PATCH /urunler/5
Body: { "fiyat": 120 }Sonuç:
{
"id": 5,
"ad": "Mouse",
"fiyat": 120,
"renk": "siyah",
"stok": 50
}Sadece fiyat değişti, diğer her şey aynı kaldı.
Gerçek Hayat Benzetmesi: Bir Word belgesinde sadece bir paragrafı düzeltmek.
5. DELETE - Veri Silmek
Amaç: Var olan bir kaydı silmek.
Özellikleri:
- Belirtilen kaynağı siler
- Genellikle body gerekmez
- Başarılı olursa 200 veya 204 döner
- Geri alınamaz (dikkatli kullanın!)
Örnekler:
DELETE /urunler/5 → 5 numaralı ürünü sil
DELETE /yorumlar/123 → 123 numaralı yorumu sil
DELETE /sepet/urun/7 → Sepetten 7 numaralı ürünü çıkarGerçek Hayat Benzetmesi: Kütüphaneden bir kitabı tamamen çıkarmak.
PUT vs PATCH Farkı
Bu ikisi sık karıştırılır. Basit bir örnekle açıklayalım:
Senaryo: Kullanıcı Profili Güncelleme
Mevcut profil:
{
"id": 1,
"isim": "Mehmet",
"email": "mehmet@mail.com",
"telefon": "555-1234",
"sehir": "Ankara"
}Sadece şehri değiştirmek istiyoruz: İstanbul
PUT ile:
PUT /kullanicilar/1
Body: {
"isim": "Mehmet",
"email": "mehmet@mail.com",
"telefon": "555-1234",
"sehir": "İstanbul"
}Tüm alanları tekrar göndermek zorundasınız.
PATCH ile:
PATCH /kullanicilar/1
Body: { "sehir": "İstanbul" }Sadece değişen alanı gönderirsiniz.
Sonuç: PATCH daha pratik ve verimli.
Metod Seçimi Rehberi
| Ne Yapmak İstiyorsunuz? | Metod |
|---|---|
| Liste görüntülemek | GET |
| Detay görüntülemek | GET |
| Arama yapmak | GET |
| Yeni kayıt oluşturmak | POST |
| Formu göndermek | POST |
| Kaydı tamamen değiştirmek | PUT |
| Kaydın bir kısmını güncellemek | PATCH |
| Kayıt silmek | DELETE |
Güvenli ve Idempotent Metodlar
Güvenli (Safe) Metodlar
Sunucuda hiçbir değişiklik yapmayan metodlar:
- GET ✓
Idempotent Metodlar
Aynı isteği birden fazla yapınca sonuç değişmeyen metodlar:
- GET ✓ (Her seferinde aynı veriyi alırsınız)
- PUT ✓ (10 kez çalıştırsanız da sonuç aynı)
- DELETE ✓ (Zaten silinmişse bir şey olmaz)
- POST ✗ (Her seferinde yeni kayıt oluşur!)
Örnek:
POST /siparisler { "urunId": 1 }Bu isteği 3 kez yaparsanız, 3 farklı sipariş oluşur. Bu yüzden POST idempotent değildir.
Ücretsiz API'lerde Metodlar
Çoğu ücretsiz, açık API sadece GET metodunu destekler. Neden?
- POST/PUT/DELETE ile veri değiştirilir
- Herkes değiştirebilseydi kaos olurdu
- Bu metodlar genellikle kimlik doğrulama gerektirir
JSONPlaceholder gibi test API'leri tüm metodları destekler ama aslında veriyi değiştirmez, sadece simüle eder.
Hoppscotch'ta Metodları Test Etme
GET Testi
Metod: GET
URL: https://jsonplaceholder.typicode.com/posts/1Sonuç: 1 numaralı post'un detayları
POST Testi (Simülasyon)
Metod: POST
URL: https://jsonplaceholder.typicode.com/posts
Headers: Content-Type: application/json
Body:
{
"title": "Yeni Başlık",
"body": "Bu bir test içeriğidir",
"userId": 1
}Sonuç: Yeni oluşturulan post (id: 101)
PUT Testi (Simülasyon)
Metod: PUT
URL: https://jsonplaceholder.typicode.com/posts/1
Headers: Content-Type: application/json
Body:
{
"id": 1,
"title": "Güncellenmiş Başlık",
"body": "Güncellenmiş içerik",
"userId": 1
}DELETE Testi (Simülasyon)
Metod: DELETE
URL: https://jsonplaceholder.typicode.com/posts/1Sonuç: Boş yanıt, 200 OK
Diğer HTTP Metodları
Yukarıdakiler en yaygın olanlar. Daha az kullanılan metodlar da var:
| Metod | Açıklama |
|---|---|
| HEAD | GET gibi ama sadece header döner, body yok |
| OPTIONS | Endpoint'in desteklediği metodları sorgular |
| CONNECT | Tünel bağlantısı kurar (proxy için) |
| TRACE | Debug amaçlı, isteği geri döndürür |
Bunlarla günlük geliştirmede pek karşılaşmazsınız.
Özet Tablosu
| Metod | Amaç | Body | Güvenli | Idempotent |
|---|---|---|---|---|
| GET | Okuma | Yok | Evet | Evet |
| POST | Oluşturma | Var | Hayır | Hayır |
| PUT | Tam güncelleme | Var | Hayır | Evet |
| PATCH | Kısmi güncelleme | Var | Hayır | Evet |
| DELETE | Silme | Yok/Opsiyonel | Hayır | Evet |
Sırada Ne Var?
HTTP metodlarını öğrendik. Şimdi bir isteğin sonucunu nasıl anlayacağımızı öğrenmemiz gerekiyor.
Bir sonraki makalede HTTP Durum Kodlarını (200, 404, 500 vb.) detaylı inceleyeceğiz.


