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
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
)
func main() {
// buraya yaz
}Örnek çözüm
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
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.____)
json.NewEncoder(w).Encode(u)
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 |