В настоящее время я работаю над проектом с организацией следующим образом:
- Клиент - получает данные с главного сервера через REST API.
- Сервер - запрашивает данные с других серверов через сторонние API
- Сторонние API - не зависящие от меня сервисы, предоставляющие данные на сервер (Reddit, Hackernews, Quora и т. Д.)
В качестве аргумента, скажем, клиенту сначала нужен список элементов из каждого стороннего API. Из этого списка будет выбран элемент, и в этот момент клиент должен увидеть полное содержимое элемента, а также ответы (то есть комментарии) на элемент. Я пытаюсь выбрать между тремя вариантами:
А ля карт
При таком подходе у меня будет 3 отдельных конечных точки на моем сервере: одна для получения списка элементов, одна для получения основного контента для элемента и одна для получения ответов элемента.
- Плюсы: я никогда не делаю больше запросов, чем нужно, запросы должны быть маленькими, поэтому обычно они должны быть быстрее.
- Минусы: я должен сделать много запросов. После выбора элемента из списка пользователю, возможно, придется подождать, прежде чем увидеть основной контент, а затем подождать еще дольше, чтобы увидеть ответы
Серверный кеш
В этом запросе я бы сделал один вызов на мой сервер, чтобы «извлечь» все данные для всех источников. Затем данные будут кэшироваться на сервере. Тогда клиент будет иметь те же конечные точки REST, что и раньше, за исключением того, что между вызовами не будет много ожидания, так как мой сервер уже имеет данные и просто должен передать их клиенту.
- Плюсы: все еще легко реализовать на стороне клиента, но без проблем с задержкой
- Минусы: немного более сложная сторона сервера, и первый вызов может занять очень много времени.
Клиентский кеш
Этот сценарий похож на предыдущий, за исключением того, что клиент делает только один запрос к серверу: предоставьте мне все данные. Отсюда ответственность за сохранение данных и их правильное использование лежит на клиенте.
- Плюсы: легкая реализация сервера, очень быстрая после первого звонка
- Минусы: первый вызов будет очень медленным, более сложная реализация на стороне клиента
Я не уверен, какой подход лучше, или, может быть, я упускаю очевидное решение. Любой совет будет принята с благодарностью!