Tüm blog yazıları

HTTP Metodları (Verbs)

API isteklerinde kullanılan HTTP metodları olan GET, POST, PUT, PATCH ve DELETE nedir? Bu kapsamlı rehberde, her bir metodun amacını, ne zaman kullanılacağını ve aralarındaki kritik farkları öğrenin. Web servislerindeki veri işlemlerini anlamak için kaçırmayın!

eminbasbayan6 dk okuma
HTTP Metodları: GET, POST, PUT, PATCH, DELETE fiillerini açıklayan diyagram

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:

MetodURLNe Yapar
GET/kitaplarTüm kitapları listeler
POST/kitaplarYeni kitap ekler
GET/kitaplar/55 numaralı kitabı getirir
PUT/kitaplar/55 numaralı kitabı günceller
DELETE/kitaplar/55 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:

metin
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 getir

Gerç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:

metin
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şturur

Gerç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:

json
{
  "id": 5,
  "ad": "Mouse",
  "fiyat": 150,
  "renk": "siyah",
  "stok": 50
}

PUT isteği:

metin
PUT /urunler/5
Body: { "ad": "Gaming Mouse", "fiyat": 250 }

Sonuç:

json
{
  "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:

json
{
  "id": 5,
  "ad": "Mouse",
  "fiyat": 150,
  "renk": "siyah",
  "stok": 50
}

PATCH isteği:

metin
PATCH /urunler/5
Body: { "fiyat": 120 }

Sonuç:

json
{
  "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:

metin
DELETE /urunler/5        → 5 numaralı ürünü sil
DELETE /yorumlar/123     → 123 numaralı yorumu sil
DELETE /sepet/urun/7     → Sepetten 7 numaralı ürünü çıkar

Gerç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:

json
{
  "id": 1,
  "isim": "Mehmet",
  "email": "mehmet@mail.com",
  "telefon": "555-1234",
  "sehir": "Ankara"
}

Sadece şehri değiştirmek istiyoruz: İstanbul

PUT ile:

metin
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:

metin
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ülemekGET
Detay görüntülemekGET
Arama yapmakGET
Yeni kayıt oluşturmakPOST
Formu göndermekPOST
Kaydı tamamen değiştirmekPUT
Kaydın bir kısmını güncellemekPATCH
Kayıt silmekDELETE

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:

metin
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

metin
Metod: GET
URL: https://jsonplaceholder.typicode.com/posts/1

Sonuç: 1 numaralı post'un detayları

POST Testi (Simülasyon)

metin
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)

metin
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)

metin
Metod: DELETE
URL: https://jsonplaceholder.typicode.com/posts/1

Sonuç: Boş yanıt, 200 OK

Diğer HTTP Metodları

Yukarıdakiler en yaygın olanlar. Daha az kullanılan metodlar da var:

MetodAçıklama
HEADGET gibi ama sadece header döner, body yok
OPTIONSEndpoint'in desteklediği metodları sorgular
CONNECTTünel bağlantısı kurar (proxy için)
TRACEDebug amaçlı, isteği geri döndürür

Bunlarla günlük geliştirmede pek karşılaşmazsınız.

Özet Tablosu

MetodAmaçBodyGüvenliIdempotent
GETOkumaYokEvetEvet
POSTOluşturmaVarHayırHayır
PUTTam güncellemeVarHayırEvet
PATCHKısmi güncellemeVarHayırEvet
DELETESilmeYok/OpsiyonelHayırEvet

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.

JavaScript Classes ile pratik uygulamalar, metotlar arası iletişim ve gerçek dünya kod örnekleri
JavaScript Dersleri9 dk okuma

JavaScript Classes - Pratik Uygulamalar

JavaScript class'ları ile pratik uygulamalara geçin! Metotlar arası iletişimden constructor'da metot çağırmaya, kod tekrarını azaltmaktan gerçek dünya senaryolarına kadar class kullanımının inceliklerini keşfedin. Kendi alışveriş sepeti örneğinizle bilginizi pekiştirin.

Yazıyı oku
JavaScript class yapısını gösteren bir kod örneği, ES6 ile modern nesne oluşturma
JavaScript Dersleri9 dk okuma

JavaScript Classes

ES6 ile JavaScript'e gelen class yapısı sayesinde nesne oluşturmak artık çok daha kolay ve düzenli! Constructor function karmaşasından kurtulup, okunabilir ve yönetilebilir kodlar yazmak isteyenler için modern JavaScript'in temel taşı olan class'ları tüm detaylarıyla keşfedin. Bu rehberle nesne şabl

Yazıyı oku
JavaScript kodunda Constructor Function ve new keyword'ü ile nesne oluşturma örnekleri
JavaScript Dersleri8 dk okuma

Constructor Functions ve new Keyword

Factory Function'ların hafıza israfı sorununa Constructor Function'lar ve new keyword'ü ile son verin! Metotları paylaştırarak JavaScript objelerini daha verimli nasıl oluşturacağınızı, new'in perde arkasında neler yaptığını ve prototype sisteminin gücünü bu rehberde keşfedin.

Yazıyı oku

Çerez tercihlerin

Platformun çalışması için zorunlu çerezler kullanıyoruz. İzin verirsen anonim kullanım verilerini ölçüyoruz. Ayrıntıları incele