Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Merhaba, rest api geliştirirken bir kaynaktan birden fazla oluşturmamız gerekiyorsa devamlı olarak onu çoklu veri olarak mı göndermeliyiz yoksa tek tek istek atarak ayrı ayrı mı oluşturmalıyız?

Buradaki sıkıntı herhangi bir hata olması durumunda önceden oluşturulmuş kayıtları iptal etmek için tekrar istek atmak gerekiyor.

Örnek Durum:

Mesela diyelim ki bir api ile sipariş oluşturuyorsunuz. Bunun için hangi yöntem daha mantıklı?

Yöntem 1:
İlk olarak bir istek atıp siparişi oluşturmak sonrasında her siparipteki ürün için tekrar OrderItemStore endpoint'e istek atmak.

Yöntem 2: İlk olarak siparişi oluşturmak sonrasında tüm order item datasını tek bir istekde OrderItemStore endpoint'e göndererek tüm sipariş itemlerini tek seferde oluşturmak.

Yöntem 3: OrderStore endpoint'e istek atarken tüm sipariş ve sipariş içerisinde yer alan ürün bilgileri ile tek seferde hepsini oluşturmak.

Burada sıkıntı yaşadığım konu şu ki eğer yöntem 3 ü seçersek siparişlere ürün ekleme kısmını tekrar OrderItemStore kısmında tekrarlayacağız.

Yani eğer hepsini tek seferde order store'a gönderecek ve orderupdate üzerinden güncelleyeceksek OrderITem ile ilgili endpoint lere gerek kalmıyor.

Ama ileride bunlara da ihtiyacımız olan durumlar olabilir.

Şimdi kodu tekrar etmeden bu sistemi nasıl kurgulamak lazım?

Şimdilik şöyle yapıyorum
OrderStore ayrı ve OrderItemStore ayrı birer endpoint tabi bunların update'ları da
Sipariş oluşturup sipariş id yi aldıktan sonra OrderItemStore'a istek atarak siparişteki tüm ürünleri dizi olarak gönderiyorum ve bu şekilde sipariş ürünlerini oluşturuyorum.

Sizler api kurgularken örnekteki gibi tekrar eden işlemleri nasıl hallediyorsunuz?

    gokhancelebi Ben RESTful API tasarlarken açıkçası hepsini ekliyorum (gerçekten kullanılacaksa):

    POST /api/orders          -- Tek kayıt ekleme
    POST /api/orders/batch    -- Çoklu kayıt ekleme
    ...
    POST /api/orders/{id}/items
    POST /api/orders/{id}/items/batch
    ...

    POST /api/orders içerisine opsiyonel bir items alanı da olabilir:

    {
        "customer_id": 1,
        "date": "2024-08-13T22:11:29.567000Z",
        "items":[
            {
                "name": "Product 1",
                "quantity": 1
            }
        ]
    }

    Bu şekilde yapmamın sebebi ise, API kullanacak istemcilerin alt yapıları ne yazık ki her zaman art arda birkaç işlem yapacak şekilde olmuyor. Müşteri biz kuyruk kullanamayız, önce kaydı oluştur kaydet sonra tekrar istek at gibi bir sistem kuracak durumda değiliz diyor mesela. Bu onları çözüyor. RESTful'un kendi kuralları var ama bu kurallara tamamen uyarak gerçek dünyaya bir API çıkarmak her zaman mümkün olmuyor.

      mgsmus görüş için teşekkür ediyorum.

      Tekrar eden validasyon ve diğer kodlar için kolay bir yöntem bulsam çok da sorun olmayacak. Benim kafama takılan tek sorun bir değişiklik olduğunda çok fazla yeri tekrar düzenlemek gerekmesi. Hataya da çokça yol açıyor bu.

      Çoklu düzenleme için ayrı validasyon ve ekleme/silme/güncelleme kodları ve tekliler için ayrı kodlar. Çok fazla iş yükü çıkıyor.

      Teşekkür ediyorum cevabınız için.

        mgsmus ihtiyaç oldukça işlemleri bu şekilde servis sınıfına alabilirim. Proje ilerledikçe tamamı alınmış olur.