Şu anda bir kuruluşla birlikte bir proje üzerinde çalışıyorum:
- İstemci - Ana sunucudan veri REST api ile alır.
- Sunucu - Üçüncü taraf API'ler aracılığıyla diğer çeşitli sunuculardan veri ister
- Üçüncü taraf API'leri - Sunucuya veri sağlayan denetimim dışındaki hizmetler (Reddit, Hackernews, Quora, vb.)
Argüman uğruna, müşterinin önce üçüncü taraf API'lerinin her birinin öğelerinden oluşan bir listeye ihtiyacı olduğunu varsayalım. Bu listeden, müşterinin, öğenin içeriğinin tamamını ve ayrıca öğeye verilen yanıtları (örneğin yorumları) görmesi gereken bir nokta seçilecektir. Üç seçenek arasında karar vermeye çalışıyorum:
Alakart
Bu yaklaşımda sunucumda 3 ayrı uç nokta olacaktı: biri öğelerin listesini almak, biri öğenin ana içeriğini almak, diğeri de öğenin yanıtlarını almak için.
- Artıları: Asla ihtiyacım olandan daha fazla istek yapmam, talepler küçük olmalı, bu yüzden genellikle daha hızlı olmalılar.
- Eksileri: Çok fazla istek yapmak zorundayım. Listeden bir öğe seçtikten sonra, kullanıcının ana içeriği görmeden önce beklemesi ve sonra yanıtları görmek için daha uzun süre beklemesi gerekebilir
Sunucu tarafı önbellek
Bu istekte, tüm kaynaklar için tüm verileri "almak" için sunucuma tek bir arama yapardım. Veriler daha sonra sunucuda önbelleğe alınır. İstemci daha sonra olduğu gibi REST bitiş noktalarına sahip olacaktı, ancak çağrılar arasında fazla beklememek dışında sunucum zaten veriye sahipti ve istemciye beslemesi gerekiyordu.
- Artıları: Müşteri tarafında uygulanması kolaydır, ancak gecikme sorunları olmadan
- Eksileri: Biraz daha fazla sunucu tarafında yer aldı ve ilk arama gerçekten çok uzun sürebilir.
İstemci tarafı önbellek
Bu senaryo öncekine benzer, ancak istemci sunucuya yalnızca bir istek yapar: bana tüm verileri verin. Buradan verileri kaydetmek ve uygun şekilde kullanmak müşterinin sorumluluğundadır.
- Artıları: Kolay sunucu uygulaması, ilk aramadan sonra çok hızlı
- Eksileri: İlk çağrı çok yavaş olacak, daha karmaşık müşteri tarafında uygulama
Hangisinin en iyi yaklaşım olduğundan emin değilim, ya da belki bariz çözümü özlüyorum Herhangi bir tavsiye çok takdir edilecektir!