Go ile web servisleri ve REST API
Standart kütüphaneyle yönlendirme yapan, SQLite’a güvenle yazan, kimlik doğrulaması ve yapılandırılmış günlüğü olan üretime hazır bir REST API kurarsın.
Seviye 301 · 21 ders · 18 pratik lab
Dersler
API tasarımı
- REST tasarımı: kaynaklar, yöntemler ve durum kodları
- Go 1.22 ServeMux: yöntem ve yol desenleri
- JSON istek çözme ve yanıt yazma
- Girdi doğrulama ve tutarlı hata yanıtları
- Sayfalama, süzme ve sıralama
- Kısa görev: bellekte tutan küçük not API’si
Veritabanı
- database/sql ve SQLite ile bağlantı
- Parametreli sorgular ve SQL enjeksiyonu
- İşlemler (transaction) ve hata durumunda geri alma
- Şema geçişleri ve sürümleme
- Depo katmanı: işleyiciyi veritabanından ayırmak
- Kısa görev: not API’sini SQLite’a taşı
Kimlik, günlük ve işletim
- Parola saklamak: bcrypt ve argon2
- Oturum çerezleri mi, imzalı belirteçler mi?
- JWT’yi doğru doğrulamak: algoritma ve süre tuzakları
- Yetkilendirme: her kayıtta sahiplik denetimi
- slog ile yapılandırılmış günlük
- Ortamdan yapılandırma ve gizli değerler
- API için uçtan uca testler
- Kısa görev: kim neyi değiştirdi, denetim günlüğü ekle
Bitirme
- Bitirme görevi: kimlik doğrulamalı varlık envanteri API’si
Pratik lablar
- ServeMux desenleriyle not yolları tanımlamak: Go 1.22 ServeMux'un metot ve yol desenleriyle listele, getir, oluştur ve sil yollarını tanımla; yol değerini PathValue ile oku.
- JSON isteğini sıkı kurallarla çözmek: Gövdeyi boyut sınırıyla oku, bilinmeyen alanları ve fazladan veriyi reddet; hatalarda doğru durum kodunu döndür.
- Yanlış durum kodlarını düzeltmek: Her duruma 200 döndüren API'de oluşturma, bulunamama, çakışma ve doğrulama durumlarını doğru kodlara bağla; httptest tablosuyla tümünü sına.
- Rezervasyon isteğini doğrulamak: Tarih, kişi sayısı ve e-posta alanlarını doğrula; ilk hatada durmadan tüm alan hatalarını tek yanıtta döndür.
- API hatalarını tek zarfta toplamak: Kimi yerde düz metin kimi yerde JSON dönen hataları kod, ileti ve istek kimliği içeren tek zarfa topla.
- Sayfalama ve sıralamayı güvenli yapmak: Sayfa boyutuna üst sınır koy, sıralama alanını izin listesinden seç ve imleç tabanlı sayfalamaya geç; eklemeler sırasında kayıt atlanmadığını test et.
- SQL aramasını yer tutuculu hale getirmek: fmt.Sprintf ile kurulan arama sorgusunu yer tutuculu hale getir ve tırnak içeren aramanın düzgün çalıştığını test et.
- Stok aktarımını işlem içinde yapmak: İki depo arasında stok aktarımını tek işlemde yap; ikinci adım başarısız olursa geri al ve toplam stoğun korunduğunu göster.
- Kapatılmayan sonuç kümesinin havuzu tüketmesini gidermek: Yük altında kilitlenen API'de kapatılmayan Rows ve denetlenmeyen rows.Err kullanımlarını bul, düzelt ve bağlantı havuzu istatistiklerinin dengede kaldığını göster.
- Şema göçünü sürüm tablosuyla uygulamak: Göç dosyalarını sırayla uygulayan ve uygulananları sürüm tablosuna yazan küçük çalıştırıcıyı tamamla; ikinci çalıştırma hiçbir şey yapmamalı.
- İşleyicileri veritabanından ayırmak: İşleyicilerdeki SQL'i depo arayüzünün arkasına taşı ve işleyici testlerini bellek içi sahte depoyla çalıştır.
- Bellek içi API'yi SQLite'a taşımak: Bellek içi görev API'sini SQLite deposuna taşı; iki deponun aynı sözleşme testlerini geçtiğini ve eşzamanlı yazmalarda kayıp olmadığını göster.
- Parolaları bcrypt ile saklamak: Düz SHA-256 ile saklanan parolaları bcrypt'e çevir; doğrulama fonksiyonunu yaz ve aynı parolanın farklı özet ürettiğini test et.
- JWT doğrulamasındaki boşlukları kapatmak: Algoritmayı ve süreyi denetlemeyen belirteç doğrulamasını düzelt; imzasız, yanlış algoritmalı ve süresi dolmuş belirteçlerin reddedildiğini testlerle göster.
- Her kayıtta sahiplik denetimi yapmak: Sedirli Hukuk Bürosu'nun dosya API'sinde başka kullanıcının kaydını döndüren, güncelleyen ve silen uç noktaları bul; denetimi depo katmanına taşı ve regresyon testleri ekle.
- slog ile yapılandırılmış istek kaydı: Her istek için metot, yol, durum ve süreyi JSON olarak yazan slog ara katmanını ekle ve parola alanını maskele.
- Ayarları ve gizli değerleri ortamdan almak: Koda gömülü veritabanı yolu ve imza anahtarını ortam değişkenlerine taşı; eksik zorunlu değerde açılışta anlaşılır hatayla dur.
- Kim neyi değiştirdi kaydını uçtan uca sınamak: Değişiklikleri kullanıcı, eski ve yeni değerle denetim tablosuna aynı işlemde yaz; httptest ile giriş, değişiklik ve kayıt denetimini kapsayan uçtan uca testleri ekle.
Kurs hakkında
Standart kütüphaneyle yönlendirme yapan, SQLite’a güvenle yazan, kimlik doğrulaması ve yapılandırılmış günlüğü olan üretime hazır bir REST API kurarsın.
Ne öğreneceksin
- API tasarımı
- Veritabanı
- Kimlik, günlük ve işletim
- Bitirme
Ön koşullar
Aynı yolun 101 ve 201 düzeyindeki konularına hâkim olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 301 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.