• Buradasın

    Blazor UI ve Microservice Mimarisinde Basket (Sepet) Servisi Oluşturma Eğitimi

    youtube.com/watch?v=gonD9LRpikE

    Yapay zekadan makale özeti

    • Bu video, bir yazılım eğitim içeriğidir. Eğitmen, Salih Cantekin adlı bir kullanıcıyla birlikte Blazor UI üzerinde basket (sepet) servisi oluşturma sürecini adım adım göstermektedir.
    • Video, basket servisi yapısının oluşturulmasından başlayarak, API Gateway üzerinden aggregation işlemleri, katalog servisi ve basket servisi arasındaki etkileşimleri, HTTP client factory'ın yapılandırılması, dependency injection kullanımı ve Redis üzerinden sepet verilerinin saklanması gibi konuları kapsamaktadır. Eğitmen, sepete ürün ekleme, güncelleme, silme ve checkout işlemleri için gerekli kodları detaylı şekilde göstermekte ve UI kısmında sepet sayfası, ürün listeleme ve toplam fiyatı hesaplama gibi kullanıcı arayüzü özelliklerini anlatmaktadır.
    • Video, microservice mimarisinde servislerin birbirleriyle nasıl iletişim kuracağını, API Gateway'ın rolünü ve Redis kullanımı gibi teknik konuları ele almaktadır. Eğitmen, kod yazma, hata düzeltme ve uygulamanın çalıştırılması süreçlerini göstererek pratik bir öğrenme deneyimi sunmaktadır. Video sonunda, bir sonraki videoda app state konusunun anlatılacağı belirtilmektedir.
    00:09Blazor UI'de Basket Servisi Tanıtımı
    • Video, Blazor UI tarafında katalog sayfasından erişilecek basket servisini hayata geçirmeyi amaçlıyor.
    • Basket sayfası tasarlanırken, API Gateway tarafında yapılan agregation işleminin nedeni ve nasıl yönetilmesi gerektiği anlatılacak.
    • Önceki videoda katalog sayfası anlatılmış, yeni video pages altında "basket" klasörü oluşturulacak.
    01:09Basket Sayfası Tasarımı
    • Basket sayfası için "page" direktifi verilerek "basket" şeklinde erişilebilecek bir sayfa oluşturuluyor.
    • Domain altında modeller klasörüne basket ile ilgili modeller (basket, basket item, order, order item) ekleniyor.
    • Basket modelinde item'ları tutan ve kullanıcının ID'sini içeren bir yapı bulunuyor.
    03:00Basket Servisi Tasarımı
    • Basket servisi için bir interface tasarlanıyor ve getBasket, updateBasket, addToBasket ve checkoutBasket metodları belirleniyor.
    • Checkout işlemi için DTO (Data Transfer Object) modeli oluşturuluyor.
    • Basket servisi için HTTP client, identity service ve logger servislerine ihtiyaç duyuluyor.
    05:53Basket Servisi İmplementasyonu
    • GetBasket metodu, API client ile basket servisine get request göndererek kullanıcının sepet bilgisini alıyor.
    • UpdateBasket metodu, basket servisine post request göndererek sepeti güncelliyor.
    • Checkout metodunda basket servisine checkout isteği gönderiliyor ve response beklenmiyor.
    09:45Sepete Ürün Eklerken Dikkat Edilmesi Gerekenler
    • Sepete ürün eklerken, ekrandaki bilgilerin katalog servisinden geldiğini unutmamak gerekir; bu bilgiler ürün adı, fiyatı ve nami gibi detayları içerir.
    • Sepete ürün eklerken, ekrandaki bilgileri doğrudan sepet servisine göndermek yerine, ürünün en güncel fiyatını veritabanından veya servisten almak gerekir.
    • Ürünün fiyatı ekranda gösterildikten sonra değişebilir, bu nedenle sepete eklerken en güncel fiyatı kullanmak önemlidir.
    11:39API Gateway ve Aggregation Kullanımı
    • Basket servisi, kendi Redis database'i olan ayrı bir servistir ve API Gateway üzerinden çalışır.
    • Web uygulaması, API Gateway aracılığıyla katalog servisinden ürün bilgisini alır ve basket servise gönderir.
    • Aggregation (bir araya getirme) işlemi, API Gateway üzerinden yapılabilir; bu sayede katalog servisten veri alınıp basket servise gönderilir.
    12:48Microservice Mimarisinde Aggregation
    • Microservice mimarisinde en çok kullanılan yöntem, API Gateway üzerinden aggregation yapmaktır.
    • API Gateway'i client'a göre şekillendirebilir veya Back and For Front (bff) projesi ekleyerek aggregation işlemlerini yapabilirsiniz.
    • Projede Ocelot kullanılmış olsa da aggregation desteği var, ancak başka bir yola gidilecek.
    13:42Sepete Ürün Eklemek İçin Model Oluşturma
    • Sepete ürün eklerken sadece product id ve hangi kullanıcının sepetine ekleneceği bilgilerine ihtiyaç vardır.
    • Sepete ekleme işlemi için bir model oluşturulur; bu modelde product id, basket id ve quantity bilgileri bulunur.
    • Basket servisinin add item metodu, sadece product id yerine basket item alır, bu nedenle API Gateway üzerinden aggregation işlemi yapılmalıdır.
    15:45API Gateway'de Controller ve Service Oluşturma
    • API Gateway'de basket controller oluşturulur ve HTTP POST metodu ile items endpointi eklenir.
    • Katalog servisine erişmek için services klasörü altında katalog service interface'i oluşturulur.
    • Katalog servisinden veri almak için getKatalogItem ve getKatalogItems metotları tanımlanır.
    20:21Dependency Injection ve Konfigürasyon
    • Dependency injection için HTTP client factory ve configuration alınıp startup'a eklenir.
    • HTTP client factory için konfigürasyon yapılır ve basket ve katalog servislerinin URL'leri belirlenir.
    • Basket servisi 5003, katalog servisi 5004 portlarda çalışıyor ve bu bilgiler konfigürasyonda tanımlanmıştır.
    23:48API Gateway ve Token İşlemleri
    • Katalog için yapılandırma ayarları oluşturulacak ve bu yapılandırma servise gönderilecek.
    • API Gateway aracılığıyla Identity servise giden isteklerde token üretip Blazer'a gönderiliyor ve Blazer bu token'i geri göndererek doğrulama sağlanıyor.
    • API Gateway'in kendisi içinde oluşturulan HTTP client'ın authorization bilgisi eklmemesi durumunda basket servise erişim sağlanamayacağı için dışarıdan gelen token bilgisini HTTP client'a set etmek gerekiyor.
    25:48Delegating Handler Oluşturma
    • .NET Core içerisinde gelen delegating handler kullanılarak token bilgisi HTTP client'a eklenecek.
    • Infrastructure klasörü altında HTTPClientDelegatingHandler adında bir sınıf oluşturulacak.
    • Constructor içinde private readonly HttpMessageHandler access değişkeni tanımlanacak ve parametre olarak alınıp injection yapılacak.
    27:03Token Bilgisini HTTP Client'a Ekleme
    • Send metodu, HTTP client'ın send, post veya get istekleri tetiklenmeden önce çalışacak.
    • HTTP context içerisindeki request'in header'ından authorization bilgisi alınıp, varsa eski authorization bilgisi silinip yeni authorization bilgisi ekleniyor.
    • Bu şekilde HTTP client kullanırken dışarıdan gelen authorization bilgisi otomatik olarak set edilmiş oluyor.
    30:35Katalog Servisi Entegrasyonu
    • Katalog servise gitmek için HTTP client oluşturulacak ve delegating handler ekleniyor.
    • Katalog servisinden veri almak için HTTP client factory kullanılarak "katalog" isimli client oluşturuluyor.
    • Katalog servisinde itemById isimli bir metod var ve bu metoda id ile HTTP get isteği gönderiliyor.
    34:15Basket ve Katalog Servisleri
    • Katalog servisinden alınan veriyi basket servise göndermek için basket servisi tasarlanıyor.
    • Basket servisi interface olarak oluşturulacak ve içinde get ve update metodları olacak.
    • BasketData ve BasketDataItem modelleri oluşturuluyor ve basket servisi içinde bu verilerle çalışılacak.
    36:52Sepete Ürün Ekleme İşlemi
    • Gelen request'in null olup olmadığı kontrol ediliyor, eğer quantity bilgisi eksikse "bad request invalid payload" hatası döndürülüyor.
    • Sepete ürün ekleme işlemi için katalog servisi ve basket servisi dependency injection ile eklendi.
    • Katalog servisinden ürün detayları ve basket servisinden mevcut sepet bilgileri alınarak sepet güncelleniyor.
    39:26Sepete Ürün Eklenme Mantığı
    • Sepete eklenecek ürün daha önce sepette varsa, mevcut ürünün quantity'si artırılıyor.
    • Sepette olmayan bir ürün eklenirse, yeni bir basket item oluşturuluyor ve sepete ekleniyor.
    • Sepete eklenen ürünün id, quantity, picture URL ve product bilgileri basket servisine gönderilerek sepet güncelleniyor.
    42:08UI Tarafı Geliştirme
    • Basket sayfası, pagination, basket servisi ve basket modeli oluşturuluyor.
    • Sepetteki ürünleri ekrana bastırmak için item'lar dolaşılarak picture URL, price ve quantity bilgileri gösteriliyor.
    • Sepetteki ürünlerin toplam fiyatı hesaplanıyor ve checkout butonu ile sipariş oluşturma işlemine geçiş yapılıyor.
    44:29Uygulamanın Test Edilmesi
    • Uygulama çalıştırılırken set start-up project üzerinden gerekli servislerin çalıştırılması sağlanıyor.
    • Sepete ürün ekleme işlemi için basket servisi dependency injection ile eklendi.
    • Katalog sayfasında "Add to Cart" butonuna basıldığında sepete ürün eklendiği kontrol ediliyor.
    50:39Sepet Ekleme İşlemi ve Sorun Çözümü
    • Login işlemi yapıldıktan sonra sepete ürün eklemeye çalışıldığında bir hata oluştu.
    • Web API gateway tarafında authorization eklenmesi ve controller metodlarında "api" kelimesinin kaldırılması gerekiyordu.
    • Token header'ın authorization kısmına eklenmesi için bir delegate handler yazıldı.
    53:12Sepet İşlemleri ve Redis Veritabanı
    • Sepete ürün eklendikten sonra sepet sayfası güncellenmedi, bu durum bir sonraki videoda app state ile anlatılacak.
    • Redis veritabanına gidilerek Salih Cantekin adlı kullanıcının sepetindeki ürünlerin detayları görüntülenebiliyor.
    • Sepetteki ürünlerin toplam fiyatı, adet sayısı ve toplam tutar görüntüleniyor.
    54:26Sepet Güncelleme İşlemleri
    • Sepete farklı ürünler eklendiğinde toplam tutar güncelleniyor.
    • Var olan bir ürüne tekrar eklendiğinde adet sayısı artırılıyor ve toplam tutar hesaplanıyor.
    • Ürünlerden silme işlemi yapıldığında toplam tutar güncelleniyor.
    55:28Video Kapanışı
    • Sepete ekleme ve silme işlemlerinde otomatik güncelleme durumu bir sonraki videoda app state ile anlatılacak.
    • Projeye kart componenti ve CSS düzenlemeleri yapıldı.
    • İzleyicilerden video beğenmeleri, kanala abone olmaları ve zil işaretine basmaları isteniyor.

    Yanıtı değerlendir

  • Yazeka sinir ağı makaleleri veya videoları özetliyor