Sıfırdan REST API Yazma: Mux ve Net/http ile Başlama
Go ile REST API yazmak, diğer dillere kıyasla çok daha basittir. Standart kütüphane yeterlidir; Mux sadece yönlendirmeyi kolaylaştırır. Burada GET ve POST işlemleri yapan bir basit API örneği göreceğiz.
Problemi açıklamak gerekirse: HTTP isteklerini farklı URL'lere göre yönlendirmek, JSON yanıt vermek ve basit veri saklama işlemlerini tek dosyada halletmek istiyoruz.
1package main23import (4"encoding/json"5"fmt"6"log"7"net/http"89"github.com/gorilla/mux"10)1112type Kitap struct {13ID int `json:"id"`14Baslik string `json:"baslik"`15Yazar string `json:"yazar"`16}1718var kitaplar = []Kitap{19{ID: 1, Baslik: "1984", Yazar: "George Orwell"},20{ID: 2, Baslik: "Dune", Yazar: "Frank Herbert"},21}2223func tumKitaplar(w http.ResponseWriter, r *http.Request) {24w.Header().Set("Content-Type", "application/json")25json.NewEncoder(w).Encode(kitaplar)26}2728func kitapEkle(w http.ResponseWriter, r *http.Request) {29var yeni Kitap30json.NewDecoder(r.Body).Decode(¥i)31yeni.ID = len(kitaplar) + 132kitaplar = append(kitaplar, yeni)33w.Header().Set("Content-Type", "application/json")34w.WriteHeader(http.StatusCreated)35json.NewEncoder(w).Encode(yeni)36}3738func main() {39router:= mux.NewRouter()4041router.HandleFunc("/kitaplar", tumKitaplar).Methods("GET")42router.HandleFunc("/kitaplar", kitapEkle).Methods("POST")4344fmt.Println("Server:8080 adresinde çalışıyor...")45log.Fatal(http.ListenAndServe(":8080", router))46}Bu kodu çalıştırmak için önce Mux'u indirin:
1go get github.com/gorilla/mux2go run main.goSonra test edin:
Beklenen çıktı:
1[{"id":1,"baslik":"1984","yazar":"George Orwell"},{"id":2,"baslik":"Dune","yazar":"Frank Herbert"}]Yeni kitap eklemek için:
1curl -X POST http://localhost:8080/kitaplar \2-H "Content-Type: application/json" \3-d '{"baslik":"Fondation","yazar":"Isaac Asimov"}'Sık yapılan hata: `json.NewDecoder` kullanırken istek gövdesini (Body) kapatmamak. Gerçek projede `defer r.Body.Close()` ekleyin. Ayrıca Mux olmadan da `http.HandleFunc` ile yönlendirme yapabilirsiniz, ancak Mux URL parametreleri (`/kitaplar/{id}` gibi) ve HTTP metotlarını daha temiz hale getirir.
0 yorum