В даний час я працюю над проектом в організації таким чином:
- Клієнт - отримує дані з основного сервера через REST api.
- Сервер - запитує дані з різних інших серверів через сторонні API
- Сторонні API - сервіси, які не знаходяться під моїм контролем, які надають дані серверу (Reddit, Hackernews, Quora тощо)
Для аргументації скажімо, що спочатку клієнту потрібен перелік елементів із кожного стороннього API. З цього списку буде обраний пункт, в який момент клієнту необхідно побачити повний вміст продукту, а також відповіді (тобто коментарі) до елемента. Я намагаюся вирішити між трьома варіантами:
Ля карт
У такому підході у мене на сервері були б три окремі кінцеві точки: одна для отримання списку елементів, одна для отримання основного вмісту для елемента та одна для отримання відповідей на елемент.
- Плюси: я ніколи не надсилаю більше запитів, ніж потрібно, запитів має бути мало, тому вони, як правило, повинні бути швидшими.
- Мінуси: я повинен зробити багато запитів. Вибравши елемент зі списку, користувачеві, можливо, доведеться почекати, перш ніж побачити основний вміст, а потім ще довше чекати, щоб побачити відповіді.
Кеш-сервер на стороні сервера
У цьому запиті я б здійснив єдиний дзвінок на свій сервер, щоб "отримати" всі дані для всіх джерел. Дані будуть кешовані на сервері. Тоді клієнт матиме ті ж кінцеві точки REST, що і раніше, за винятком того, що між дзвінками не чекатиме багато часу, оскільки мій сервер вже має дані і просто повинен його подати клієнту.
- Плюси: все ще просто реалізувати на стороні клієнта, але без проблем із затримкою
- Мінуси: трохи більше залученого боку сервера, і перший дзвінок може зайняти дійсно дуже довго.
Кеш на стороні клієнта
Цей сценарій схожий на попередній, за винятком того, що клієнт лише коли-небудь робить один запит на сервер: дайте мені всі дані. Звідси відповідальність за збереження даних та їх використання належить клієнту.
- Плюси: проста реалізація сервера, дуже швидка після першого дзвінка
- Мінуси: перший виклик буде дуже повільним, складнішим є реалізація на стороні клієнта
Я не впевнений, який найкращий підхід, чи, можливо, я пропускаю очевидне рішення. Будь-яка порада буде дуже вдячна!