REST API Tasarımı: Çoklu çağrılar ve API'ya yapılan tek çağrı


19

Mobil uygulamalar tarafından tüketilecek bir e-Ticaret web sitesi için bir Rest API geliştiriyoruz.

Bir uygulamanın ana sayfasında Kaydırıcılar, En İyi Markalar, En Çok Satan Ürünler, Trend Olan Ürünler vb.

API çağrıları yapmak için iki seçenek:

Tek Çağrı:

www.example.com/api/GetAllInHome

Birden Fazla Çağrı:

www.example.com/api/GetSliders

www.example.com/api/GetTopBrands

www.example.com/api/GetBestSellingProducts

www.example.com/api/GetTrendingProducts

Dinlenme api tasarımı için en iyi yaklaşım hangisidir - tek veya çoklu çağrı, artıları ve eksileri açıklayın?

Hangisi isteğe cevap vermek için daha fazla zaman alacak?

Yanıtlar:


15

Gelen Teorisi aynı anda birden çok arama daha esnek ve sadece hızlı gibidir.

Bununla birlikte, pratikte bir sayfa yüklerseniz ve daha sonra o sayfanın her bir bölümünü yüklerseniz, sonuçları geri getirene kadar her yerde yükleme döndürücüleri görüntülenir, sonuç yavaş ve ayrıktır.

Bu nedenle AJAX veri istekleri az miktarda kullanılmalıdır ve yalnızca sayfanın yüklenmesi yavaş olan veya sayfanın geri kalanından farklı bir döngüde yenilenmesi gereken bir bölümü olduğunda kullanılmalıdır. Master'dan bir seçenek seçmek ve master'ı yeniden yüklemeden ilgili ayrıntıyı görüntülemek istediğiniz bir master / detay ekranı söyleyin.

Yaygın bir tasarım, kodlama esnekliği ve mikro hizmet endişeleri için ayrı API'leri tutmaktır, ancak web sitesindeki veri sunucusu tarafını birleştirmektir. Böylece müşterinin kendi web sitesine tek bir çağrı yapması gerekir. Önbellekleme uygun API çağrıları veri merkezinde hızlı olmalıdır.

Ayrıca, hiç istemci API çağrısı almayı düşünün. HTML sunucusu tarafını oluşturmanız yeterlidir. Javascript tek sayfa uygulama çerçeveleri sizi api rotasını aşağı itmek rağmen. Genellikle yüksek hacimli e-ticaret siteleri için en uygun yaklaşım değildir.

resim açıklamasını buraya girin


Teşekkürler, Aslında Bu api android ve i telefon uygulamalarında tüketilir, sürgüler, markalar, tek api çağrısında ürünler veya bireysel kaynak için api'ye bireysel çağrı yapıldığında uygulama ana sayfasının ne zaman yüklendiğini bilmek istiyorum kullanıcılar aşağı kayar?
shaijut

Aynı mantık geçerlidir, gerekli olmadığında eş zamanlı aramaları en aza indirin. Bir uygulama, arka planda bilgi indirmek için biraz daha esneklik sağlar. GetChangesSInce (tarih) yaklaşımına geçmek isteyebilirsiniz
Ewan

Sonuç olarak, uygulamanın ana sayfası yüklendiğinde bir kerede tüm ana sayfa kaynakları yanıtını çağırmak için tek bir API'ye sahip olmak ve sayfanın güncellenecek bir bölümü olduğunda mikro hizmet için ayrı olarak farklı api'lere sahip olmak, ?
shaijut

bu bölümlerin neden sadece sayfa / ana verilerle doldurulmadığına dair iyi bir nedeniniz yoksa
Ewan

Amazon, flipkart gibi uygulamalar nasıl çalışır? Kullanıcı uygulamayı açtığında tüm ana sayfa kaynaklarını tek bir çağrıda yüklemiyor mu? Bu konuda en iyi yaklaşımın ne olacağını bilmek istiyorum.
shaijut

5

TL; DR: Tüm diğer uygulama hususları bir yana, tek bir çağrı yapmak birden fazla çağrı yapmaktan daha hızlı olacaktır. Çağrıları eşzamansız olarak çalıştırmak, belirli bir işlemi kullanıcı perspektifinden tamamlamak için gereken toplam süreyi kısaltabilir (bu da ihtiyacınız olan her şey olabilir), ancak toplu olarak, birden fazla çağrı için geçen süre daha uzun olacaktır.

Ancak sizin durumunuzda bunun tam hikaye olduğundan emin değilim.

REST API'leri, fikri popüler yapan makalenin çeşitli yorumları nedeniyle biraz belirsiz bir terimdir. Bununla birlikte, bir REST API'sini neyin oluşturduğuna dair en liberal yorumla bile, sahip olduğunuz şey gerçekten uymuyor.

Temel ilke, eylem gerçekleştirmek istediğiniz bir kaynağınızın olmasıdır. URI, ilgilendiğiniz kaynağı tanımlar ve normalde bu kaynağa ne yapmak istediğinizi belirtmek için HTTP fiillerini kullanırsınız.

Özel durumunuzda, tüm yöntemlerinizin adında 'get' kelimesi bulunur. HTTP isteğinde kullanılan fiili, o konumda bulunan kaynağı 'almak' istediğinizi belirtmek için değiştiriyor olmalısınız.

URI şemanız, API'nızın kullanıcılarına sunmak istediğiniz kaynakların mantıksal hiyerarşisini temsil etmelidir, bu durumda sizin durumunuzda /api/products?category=slidersürün koleksiyonunuzu filtrelemek gibi bir şey kullanmayı düşünürüm . Bu, istemciler tüm ürünlerinizi almak istediğinde, sorgu dizesini atlayabilecekleri anlamına gelir.


Teşekkürler, yani urlAPI için bekarsınız, ancak Query String kullanılarak farklı kaynaklara talep yapılmalı mı? Ayrıca kontrol bu .
shaijut

Evet, çağrılarınızı eşzamansız olarak çalıştırmak, verileri almak için gereken mutlak süreyi azaltacaktır, ancak toplamda, geçen süre daha büyük olacaktır; Daha fazla çağrı, bir TCP bağlantısının yükünü ve bir iletişim gidiş-dönüşünü tekrarlamak zorundadır. keep-aliveArent gibi özellikleri kullanmak bile bunu tamamen kaldıracak.
richzilla

Kategori, tek bir ürün kaynağının mülkü olacaktır. Mantıksal olarak, bir ürün koleksiyonu
getiriyor

yani, kullanıcı uygulamanın ana sayfasını açtığında, bir çağrı yukarıda belirtilen tüm kaynakları döndüren api'ye gitmelidir? ya da kaydırma yaptığı zaman en iyi uygulama olan belirli kaynaklar için bireysel çağrılar yapılmalıdır?
shaijut

Bu, uygulamanızın her noktasında kullanıcılarınızın ne görmeyi beklediğine bağlıdır. Örneğin, bu web sitesini ele alalım, tıkladığınızda questionsURI'nin olduğunu /questions, en sevdiğiniz etiketlerden birini tıkladığınızda, URI/questions/tagged/<tagname>
richzilla
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.