Obecnie pracuję nad projektem z organizacją w następujący sposób:
- Klient - Pobiera dane z głównego serwera za pośrednictwem interfejsu API REST.
- Serwer - żąda danych z różnych innych serwerów za pośrednictwem interfejsów API innych firm
- Interfejsy API innych firm - Usługi poza moją kontrolą, które dostarczają dane do serwera (Reddit, Hackernews, Quora itp.)
Dla argumentu załóżmy, że klient najpierw potrzebuje listy elementów z każdego interfejsu API innej firmy. Z tej listy zostanie wybrany element, w którym to momencie klient musi zobaczyć pełną treść elementu, a także odpowiedzi (tj. Komentarze) na element. Próbuję zdecydować między trzema opcjami:
A la carte
W tym podejściu miałbym 3 oddzielne punkty końcowe na moim serwerze: jeden, aby uzyskać listę elementów, jeden, aby uzyskać główną zawartość elementu, i jeden, aby uzyskać odpowiedzi elementu.
- Plusy: nigdy nie składam więcej próśb niż potrzebuję, prośby powinny być małe, więc ogólnie powinny być szybsze.
- Minusy: muszę składać wiele próśb. Po wybraniu elementu z listy użytkownik może poczekać, zanim zobaczy główną zawartość, a następnie poczekać jeszcze dłużej, aby zobaczyć odpowiedzi
Pamięć podręczna po stronie serwera
W tym żądaniu wykonałbym jedno wywołanie do mojego serwera, aby „pobrać” wszystkie dane ze wszystkich źródeł. Dane byłyby następnie buforowane na serwerze. Klient miałby wtedy te same punkty końcowe REST, co wcześniej, z tym wyjątkiem, że między połączeniami nie byłoby wiele oczekiwania, ponieważ mój serwer ma już dane i musi je tylko przekazać klientowi.
- Plusy: Wciąż łatwe do wdrożenia po stronie klienta, ale bez problemów z opóźnieniami
- Minusy: nieco bardziej zaangażowana strona serwera, a pierwsze połączenie może trwać naprawdę długo.
Pamięć podręczna po stronie klienta
Ten scenariusz jest podobny do poprzedniego, z tym wyjątkiem, że klient wysyła tylko jedno żądanie do serwera: podaj mi wszystkie dane. Od tego momentu obowiązkiem klienta jest zapisanie danych i właściwe ich wykorzystanie.
- Plusy: łatwa implementacja serwera, bardzo szybka po pierwszym wywołaniu
- Minusy: pierwsze połączenie będzie bardzo wolne, bardziej skomplikowane po stronie klienta
Nie jestem pewien, które podejście jest najlepsze, a może brakuje mi oczywistego rozwiązania. Wszelkie porady będą mile widziane!