Burada bazı iyi cevaplar var, ancak iş arkadaşlarınızı ikna etmenize yardımcı olacaklarından emin değilim. Pek çok kişinin belirttiği gibi, önerdiğiniz şey RESTful tasarımdan uzaklaşmak değildir, ve bunun teklifinizle ilgili bir öneride bulunmanın anahtarı olduğunu düşünüyorum.
REST, API'nizin yalnızca veri depolamaya ve almaya izin verdiğinden emin olmakla ilgili değildir . Daha ziyade, kaynak olarak modelleme eylemleriyle ilgilidir . API gerekir (bir uygulama olduğunu Alınacak hareketleri sağlayan Programlama sonuçta Arabirimi). Soru, bu eylemlerin nasıl modelleneceğidir.
Bir terim bulmak yerine, örnekler muhtemelen bunu iş arkadaşlarınıza açıklamanın en iyi yoludur . Bu şekilde şimdi nasıl yaptıklarını, bunun hangi sorunlara neden olduğunu, sorunu çözen bir çözümü ve hala nasıl RESTful olarak kaldığını gösterebilirsiniz.
Müşteri hedefinize bakalım.
Sorun:
UI bir Müşteriyi POSTS, ancak sonraki tablolar henüz güncellenmedi. UI kodunuzdaki (veya tarayıcı eklentisini kötüleyen vb.) Bir hata nedeniyle sonraki çağrılardan biri başarısız olursa ne olur? Şimdi verileriniz tutarsız bir durumda. API veya kullanıcı arayüzünüzün diğer bölümlerini kıran bir durum bile olabilir, bunun sadece geçersiz olduğunu söylememek değil. Nasıl iyileşirsiniz? Bunun bir şeyi bozmayacağından emin olmak için her olası durumu test etmek zorunda kalacaksınız, ancak neyin mümkün olduğunu bilmek zor olacaktır.
Çözüm:
Müşterileri oluşturmak için bir API uç noktası yapın. Bir "/ customer / create" veya hatta "/ create-customer" bitiş noktasına sahip olmak istemediğinizi biliyorsunuz, çünkü create bir fiildir ve REST'i ihlal eder. Yani bunu duyurun. "/ müşteri yaratma" işe yarayabilir. Artık CustomerCreation nesnesini POST yaptığınızda, bir müşterinin tamamen oluşturulması için gerekli tüm alanları gönderir. Bitiş noktası, verilerin eksiksiz ve geçerli olmasını (doğrulama başarısız olursa 400 ya da başka bir şey döndürerek) olmasını sağlar ve örneğin, tek bir db işleminde devam edebilir.
Ayrıca, GET / müşteri nesneleri için bir son noktaya ihtiyacınız varsa, sorun değil. İkisine de sahip olabilirsin. İşin püf noktası, tüketicilerin ihtiyaçlarına hizmet edecek uç noktalar yaratmaktır.
Avantajları:
- Kötü halin olmayacağını garanti edersin
- Talep sıralamasını, onaylama endişelerini vb. "Bilmek" zorunda kalmazlarsa UI devs için aslında daha kolaydır.
- Ağ isteklerinin gecikmesini azaltan bir API'nin konuşkanlığı değildir.
- Senaryoları test etmek ve kavramsallaştırmak daha kolaydır (kullanıcı arayüzünde eksik / hatalı biçimlendirilmiş veri parçaları isteklere yayılmaz, bazıları başarısız olabilir)
- İş mantığının daha iyi kapsüllenmesine izin verir
- Genel olarak güvenliği kolaylaştırır (çünkü kullanıcı arayüzündeki işletme ve düzenleme mantığı kullanıcılar tarafından değiştirilebilir)
- Mantıksal çoğaltmayı büyük olasılıkla azaltacaktır (aynı verilere erişim sağlayan 2+ API'dan daha fazla 2+ API tüketicisi olacak)
- Hala% 100 RESTful
Dezavantajları:
- Arka uç dev için potansiyel olarak daha fazla çalışma (ancak uzun vadede olmayabilir)
İnsanların bu paradigmayı ve eğer denememişlerse iyi olanı anlamaları zor olabilir. Umarım, kendi kodunuzdan bir örnek kullanarak onların görmesine yardımcı olabilirsiniz.
Benim kendi deneyimim, ekibimdeki geliştiriciler bu stratejiyi uygulamaya başladıklarında, faydaları hemen hemen gördükleridir.
İlerideki çalışma:
Düşüncelerden yazılan bu makale, pratik örnekler kullanarak eylemleri nesneler olarak modelleme fikrini edinmeme yardımcı oldu: https://www.thoughtworks.com/insights/blog/rest-api-design-resource-modeling
Ayrıca, tam da bu tür şeylerle ilgilendikleri için CQRS ve Etkinlik Kaynaklarını okumayı da öneririm (örneğin , API'nizi gerçek sebat mantığından ayırma ). İş arkadaşlarınızın bu tür şeyleri okumak için ne kadar istekli olduklarını bilmiyorum, ancak size daha fazla netlik verebilir ve onlara açıklamanıza yardımcı olabilir.