CodeBlanks Logo Icon CodeBlanks

HTTP API

  • Go kursu
  • İleri seviye
  • Ders 45/68
  • 6 dk

net/http ile REST üç noktaları yazarsın.

HTTP API

Go 1.22 ile http.ServeMux yöntem ve yol değişkeni destekler; çoğu servis için ek yönlendirici gerekmez:

mux := http.NewServeMux()
mux.HandleFunc("GET /urunler", h.liste)
mux.HandleFunc("POST /urunler", h.ekle)
mux.HandleFunc("GET /urunler/{id}", h.getir)  // r.PathValue("id")

Handler JSON'u json.NewDecoder(r.Body) ile okur, json.NewEncoder(w) ile yazar ve Content-Type: application/json başlığını ayarlar.

Doğru durum kodları

Bir API'nin kalitesi durum kodlarından anlaşılır: başarılı listeleme 200, yeni kayıt 201 Created, bozuk JSON 400, olmayan kayıt 404, beklenmeyen hata 500.

if err := json.NewDecoder(r.Body).Decode(&u); err != nil {
    http.Error(w, "geçersiz JSON", http.StatusBadRequest)
    return
}
w.WriteHeader(http.StatusCreated)

Uygulama Liste uç noktası

GET /urunler için [{"ad":"Kalem"}] döndüren bir işleyici yaz (json.NewEncoder(w).Encode kullan). httptest ile istek gönderip yanıt gövdesini yazdır.

Başlangıç kodu

main.go
package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "net/http/httptest"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "net/http/httptest"
)

type Urun struct {
    Ad string `json:"ad"`
}

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("GET /urunler", func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "application/json")
        json.NewEncoder(w).Encode([]Urun{{Ad: "Kalem"}})
    })
    rec := httptest.NewRecorder()
    mux.ServeHTTP(rec, httptest.NewRequest("GET", "/urunler", nil))
    fmt.Print(rec.Body.String())
}

Beklenen çıktı

[{"ad":"Kalem"}]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>"GET /urunler/{id}"</code> kalıbında id değeri nasıl okunur?

  • r.PathValue("id") Doğru cevap
  • r.URL.Query().Get("id")
  • r.Header.Get("id")
  • mux.Var("id")

Açıklama: Go 1.22 ServeMux yol değişkenlerini istekte saklar; PathValue ile okunur. Query() ise ?id=... gibi sorgu parametrelerini okur.

2 Yeni kayıt kodu

Soru
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.____)
json.NewEncoder(w).Encode(u)
Cevap
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(u)

Açıklama: 201 Created yeni bir kaynağın oluşturulduğunu bildirir.

3 Durum ve kod

Kavram Anlamı
Liste döndü 200
Ürün eklendi 201
Bozuk JSON 400
Ürün yok 404

İleri seviye bölümündeki tüm dersler