Yapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, Ahmet Karada tarafından sunulan, Go programlama dilinde API geliştirme konulu kapsamlı bir eğitim içeriğidir. Eğitmen, .NET Core ve Java ile önce çalışmış, son 6-7 aydır Go diline odaklanmaktadır.
- Eğitim, MongoDB Atlas kullanarak basit bir ToDo uygulaması geliştirme sürecini adım adım göstermektedir. İçerik, proje yapısının oluşturulması, MongoDB bağlantısının kurulması, repository ve servis katmanlarının geliştirilmesi, HTTP endpoint'lerinin oluşturulması ve unit test yazma tekniklerini kapsamaktadır. Video yaklaşık 1,5 saat sürmektedir.
- Eğitim boyunca dependen injection, DTO (Data Transfer Object) kullanımı, veritabanı ekleme, çekme ve silme işlemlerinin geliştirilmesi, Postman aracılığıyla test etme ve Go Mock kütüphanesi ile mock test yazma gibi konular ele alınmaktadır. Eğitmen, samimi bir yaklaşım sergileyerek yapılan hataları da göstermekte ve gelecek bölümlerde loglama, şifre hashleme ve e-posta gönderme konularını ele almayı planladığını belirtmektedir.
- 00:01Go API Projesi Tanıtımı
- Videoda Go API projesi yazılacak ve MongoDB Atlas kullanılarak veritabanı işlemleri gerçekleştirilecek.
- Proje yapısı app, handler, service, repository, model ve configs gibi katmanlardan oluşacak.
- Unit test yazılacak, mocklama yapılacak ve dependency injection kullanılarak test yazılması kolaylaştırılacak.
- 01:01Video Hakkında Bilgiler
- HTTP, API, localhost gibi temel kavramlar videoda açıklanmayacak, çünkü hedef 1,5 saatlik bir içerik oluşturmak.
- Video parçalara bölünmeyecek, ancak içeriğinde bölümler olacak ve hata alan yerler açıklanacak.
- Hata aldığınızda videoyu durdurup çözümü izlemeniz tavsiye ediliyor.
- 02:31Kullanılacak Teknolojiler
- Fiber framework, MongoDB Atlas, Go, Mockery ve Testify kütüphaneleri kullanılarak proje geliştirilecek.
- Testify, test yazarken geniş bir alan sunan ve birçok fonksiyona sahip bir kütüphane.
- 02:54Proje Yapısı Oluşturma
- YouTube adında bir klasör oluşturulup, app, configs, repository, DTO, service ve model klasörleri oluşturulacak.
- Configs klasöründe MongoDB bağlantısı kurulacak, repository'de veritabanı işlemleri (create, update, delete) yapılacak.
- DTO (Data Transfer Object), istenen dataları alıp istenmeyen dataları bırakmak için kullanılır.
- 04:28Mimariden Bahsediliyor
- Model klasöründe C ve Java'daki entity veya class'ların tutulduğu yer.
- App klasöründe handler'lar bulunacak ve bu handler'lar MVC yapısındaki controller'a denk gelecek.
- Create API isteği geldiğinde, servise yönlendirilip, servis repository'ye yönlendirecek ve repository'de veritabanı işlemleri gerçekleştirilecek.
- 05:44MongoDB Atlas Hesabı Oluşturma
- MongoDB Atlas'ta yeni bir hesap oluşturulacak ve collection'lar için bağlantı bilgileri alınacak.
- Go dilinde geliştirilecek bir uygulama için ücretsiz plan seçilecek.
- Database cluster oluşturulduktan sonra, uygulamadan database'e bağlantı kurulacak ve bağlantı bilgileri config dosyasına eklenecek.
- 09:11Go dilinde MongoDB Atlas Bağlantısı
- Epiccacımın altında "ib.go" ve "setup.go" adında iki Go dosyası oluşturuluyor.
- "ib.go" dosyasında MongoDB Atlas'a bağlantı kurmak için gerekli paketler indiriliyor ve bir fonksiyon yazılıyor.
- "setup.go" dosyasında MongoDB'ye bağlanma işlemi için gerekli paketler indiriliyor ve "connect" adında bir fonksiyon oluşturuluyor.
- 12:59MongoDB Bağlantısı ve Collection Oluşturma
- "connect" fonksiyonunda MongoDB'ye bağlantı kurmak için "mongo.NewClient" kullanılıyor ve bağlanma işlemi gerçekleştiriliyor.
- Bağlantı kurulduktan sonra "mongoDBAtlas" adında bir veritabanı ve dışarıdan gönderilen "collectionName" adında bir collection oluşturuluyor.
- Bağlantı kurulduktan sonra create işlemi için repository, servis ve app katmanlarına geçilecek.
- 18:08Model Oluşturma
- Model klasörü altında "todo.go" dosyası oluşturuluyor ve "type Todo struct" adında bir yapı tanımlanıyor.
- Todo struct'ı "Title" (string), "Content" (string) ve "ID" (primitive.ObjectID) alanlarından oluşuyor.
- JSON dönüşümleri için "json:" anahtarları kullanılıyor ve "omitempty" ile boş alanların kabul edilmediği belirtiliyor.
- 20:38To Do Repository Oluşturma
- To Do Repository DB oluşturup, bunun için bir struct (to do repository db) oluşturulması gerekiyor.
- To Do Repository DB struct'ı içinde bir collection (to do collection) oluşturulacak ve bu collection üzerinden ekleme, silme ve güncelleme işlemleri gerçekleştirilecek.
- To Do Repository DB struct'ı başlatmak için bir main dosyası oluşturulacak.
- 21:28Interface ve Fonksiyon Oluşturma
- To Do Repository için bir interface (To Do Repository Interface) oluşturulacak ve bu interface insert (ekleme) işlemi için metotlar tanımlanacak.
- Insert fonksiyonu, To Do model türünden bir veri alacak, ekleme işlemi başarılıysa true ve error yoksa nil dönecek.
- Fonksiyon, MongoDB'de insertOne metodu kullanılarak ekleme işlemi gerçekleştirilecek ve 10 saniye içinde bağlantı sağlanmazsa hata mesajı dönecek.
- 26:02To Do Repository DB Fonksiyonu
- NewToRepositoryDB fonksiyonu oluşturulacak ve bu fonksiyon MongoDB client alacak, collection oluşturacak ve To Do Repository DB struct'ını döndürecek.
- Main'den bağlantı açılıp collection oluşturulacak ve bu collection servise verilecek.
- Bu yapılandırma işlemi sonrası servis operasyonları ve app yazılacak.
- 27:44Servis Katmanı Oluşturma
- To Do Service dosyası oluşturulacak ve içinde struct (DefaultToService) ve interface tanımlanacak.
- DTO (Data Transfer Object) package'i oluşturulacak ve içinde To Do DTO struct'ı tanımlanacak.
- To Do Service interface'inde toDoInsert metodu tanımlanacak ve bu metot bir To Do modeli alıp, DTO ve error dönecek.
- 31:08DTO Kullanımı ve Servis Fonksiyonu
- DTO, veritabanından alınan verileri harmanlayıp bazılarını göstermek için kullanılır ve veri alırken tüm verileri almak yerine sadece bazılarını almayı sağlar.
- DefaultToService struct'ında toDoInsert fonksiyonu tanımlanacak ve bu fonksiyon To Do modeli alıp DTO ve error dönecek.
- To Do modelinin title'ının uzunluğu kontrol edilecek ve belirli bir uzunluktan kısa ise hata mesajı dönecek.
- 32:33Go daki Todo DTO ve Repository İşlemleri
- Res statüsü false olarak ayarlanıyor ve DTO dönüyor.
- Todo repository DB'ye insert işlemi yapılıyor ve todo parametresi gönderiliyor.
- Eğer hata oluşursa veya sonuç false ise nil dönülüyor, aksi takdirde DTO dönüyor.
- 34:35Todo Servis ve Dependency Injection
- Todo servisinde dependency injection için new TodoRepositoryDB kullanılıyor.
- Servis, repository ve endpoint arasındaki ilişki sarmal şeklinde düşünülüyor.
- Henkler yazıldıktan sonra endpoint çalıştırılacak.
- 36:41Fiber Paketi ve Endpoint Oluşturma
- Proje için fiber paketi indiriliyor.
- CreateTodo endpointi oluşturuluyor ve HTTP request işleme yapılıyor.
- JSON olarak gelen veri struct türüne dönüştürülüyor ve hata kontrolü yapılıyor.
- 39:21Main Fonksiyon ve Bağlantı Kurulumu
- Main fonksiyonu oluşturuluyor ve Fiber new ile başlatılıyor.
- Configs altında setupConnectedDB fonksiyonu çalıştırılıyor.
- DB bağlantısı kurulup, collection oluşturuluyor ve servis katmanı ile bağlantı sağlanıyor.
- 42:17Projenin Çalıştırılması ve Hataların Çözümü
- Proje çalıştırılıyor ve eksik paketler indiriliyor.
- MongoDB Atlas'a bağlantı sorunu yaşanıyor ve IP adresi kısıtlaması kaldırılıyor.
- MongoDB kullanıcı bilgileri güncelleniyor ve proje başarıyla ayağa kalkıyor.
- 45:42API ve Veritabanı İşlemleri
- API to-do işlemleri için ayarlar yapılıyor ve JSON formatında title ve content bilgileri giriliyor.
- MongoDB'de objek ID verilmesi için primitive new object ID yöntemi kullanılıyor ve proje yeniden başlatılıyor.
- Veritabanında collection içerisindeki dökümanları çekmek için bir fonksiyon oluşturuluyor.
- 47:52Veri Çekme İşlemi
- Veritabanından verileri almak için bir fonksiyon oluşturuluyor ve dönüş değeri models to-do haline dönüştürülüyor.
- MongoDB'den collection find metodu kullanılarak dökümanlar çekiliyor ve for döngüsü ile her döküman tek tek işleniyor.
- Hata durumunda log verisi alınıyor ve gelen document'lar to-do listesine eklenerek diziye dönüştürülüyor.
- 51:01Servis ve Handler Sayfaları
- Servis sayfasına to-do get fonksiyonu ekleniyor ve veriler çekiliyor.
- Handler sayfasına get all to-do fonksiyonu ekleniyor ve servisten alınan veriler işleniyor.
- Hata durumunda uygun hata mesajı dönülüyor ve başarılı durumunda "okey" mesajı ile veriler dönülüyor.
- 54:10API Testi ve Silme İşlemi
- Main sayfasında API root'u oluşturuluyor ve test için Postman kullanılıyor.
- Postman üzerinden GET isteği atılarak veritabanındaki veriler çekiliyor ve yeni veri eklenebiliyor.
- Silme işlemi için repository'e delete fonksiyonu ekleniyor ve primitive object ID kullanılarak veritabanından silme işlemi yapılıyor.
- 56:59Silme İşlemi Yapma
- Silme işlemi yaparken, collection'daki id'ye göre silme işlemi gerçekleştirilecek.
- Silme işlemi sırasında, gelen id kontrol ediliyor ve eğer nil değilse hata dönülüyor.
- Silme işlemi başarılı olursa true, başarısız olursa false döndürülüyor.
- 58:37Servis Katmanı Oluşturma
- Servis katmanında toDelete fonksiyonu oluşturuluyor ve dönüş değeri bool veya err olarak belirleniyor.
- Servis katmanında repo.Delete fonksiyonuna id gönderiliyor ve sonuç kontrol ediliyor.
- Eğer sonuç false ise false ve err döndürülüyor, aksi takdirde true döndürülüyor.
- 1:00:42Application Katmanı
- Application katmanında deleteTodo fonksiyonu oluşturuluyor ve ctx ve error parametreleri alıyor.
- URL'den gelen id parametresi alınıyor ve primitive object id'ye dönüştürülüyor.
- Dönüştürülen id servis katmanına gönderiliyor ve sonuç kontrol ediliyor.
- 1:04:40HTTP İstekleri ve Testler
- Projeyi ayağa kaldırdıktan sonra Postman ile delete isteği gönderiliyor ve başarılı bir şekilde true döndürüyor.
- Get isteği gönderildiğinde silinen verinin MongoDB'den collection içindeki dökümanının silindiği görülmektedir.
- Unit test yazmak için gong paketi ve diğer gerekli paketler indiriliyor.
- 1:06:27Go Mock Kullanarak Mock Oluşturma
- Go Mock kütüphanesini kullanarak mock sınıfları oluşturmak için önce "go get github.com/golang/mock/mockgen" komutu ile gerekli paketleri indirmek gerekiyor.
- "go generate" komutu ile mock sınıfları oluşturuluyor ve "-destination" parametresi ile oluşturulacak dosyaların konumu belirleniyor.
- Mock sınıfları "mox" klasörü altında "services" ve "repository" paketlerine oluşturuluyor.
- 1:09:37Test Dosyası Oluşturma ve Mock Verileri Hazırlama
- Test dosyası oluşturmak için "servis_test.go" adında bir dosya oluşturuluyor.
- Mock verileri hazırlamak için "models" paketinden örnek veriler oluşturuluyor.
- "setup" fonksiyonu ile testlerde kullanılacak mock sınıfları ve servisler oluşturuluyor.
- 1:12:57İlk Test Senaryosu
- İlk test senaryosu için "TestDefault" fonksiyonu oluşturuluyor.
- "mockRepo" üzerinden fake veriler döndürülüyor ve servis fonksiyonları bu verileri kullanıyor.
- Testify kütüphanesi kullanılarak "require.NotNil" ile dönen verilerin boş olmadığını kontrol ediliyor.
- 1:16:03Diğer Test Senaryoları İçin Öneriler
- Create işlemi için test yazarken, "Todo" modeli oluşturulup "Insert" fonksiyonuna gönderilebilir.
- Delete işlemi için test yazarken, fake verilerden birinin ID'si alınarak "Delete" fonksiyonuna gönderilebilir.
- Test sonuçlarını kontrol etmek için "require.Equal" ile dönen değerler karşılaştırılabilir.
- 1:17:58Test Çalıştırma ve Planlama
- Eğitmen, testin nasıl yapılabileceğini anlatmış ve izleyicilere denemelerini yapmalarını öneriyor.
- Test başarıyla çalıştırıldıktan sonra, eğitmen bir saat on beş dakika süren videoyu kestirmeden bitirmeyi planlıyor.
- Eğitmen, test yazmayı devam edecek ve farklı video parçalarını anlatacağını belirtiyor.
- 1:19:12Test Yazma İşlemi
- Appge'ın altına dosya oluşturulup "to the hender" adında bir test yazılıyor.
- Testte "mock service" kullanılarak gerçek servis yerine sahte (fake) bir servis oluşturuluyor.
- Testte HTTP isteği yapılıyor ve dönüş değerinin status kodunun 200 olup olmadığı kontrol ediliyor.
- 1:24:39Testi Düzenleme ve Optimizasyon
- Eğitmen, tekrar eden kod parçalarını önlemek için "setup" fonksiyonu oluşturuyor.
- Setup fonksiyonu ile testte tekrar eden üç kod parçası tek bir yerde toplanıyor.
- Bu yöntemle her testte aynı kodları tekrar yazmak zorunda kalmadan daha basit bir şekilde testler çalıştırılabiliyor.
- 1:26:16Go Uygulaması ve Yapısı
- Go uygulamasında app, henr, servis ve repostery page gibi bileşenler bulunmaktadır.
- Henr'dan gelen istekler servis page'a gider, servis page ise repostery page'a yönlendirir.
- Repostery page veritabanında insert, delete gibi işlemler yapar ve dönüş olarak statü döndürür.
- 1:26:50Test ve Bağlantılar
- Uygulama mongo ile bağlantı kurar ve mock package içinde servis ve repostery için moku oluşturarak testler yazılır.
- Configs dosyasında bağlantı işlemleri yapılır ve main.go dosyasında dependency injection işlemi gerçekleştirilir.
- Yönlendirmeler yapılır ve HTTP istekleri (POST, GET) ile veritabanı işlemler (oluşturma, silme, listeleme) gerçekleştirilir.
- 1:28:30Eğitimin Sonuçları ve Gelecek Planları
- Eğitim bir buçuk saat sürmüş ve reposter için test yazmak ve teminalları artırmak planlanmaktadır.
- Gelecekte loglama, şifre hashleme ve e-mail gönderme gibi konulara değinebilir ve proje daha da büyütülebilir.
- Eğitmen, bu süreçte Go ile ilgilenmeye başladığı altı-yedi aydır ve bu eğitimle hem kendisine hem de izleyicilere bilgi aktarımında bulunmuştur.