Мы разрабатываем REST API, который, помимо прочего, будет использоваться веб-интерфейсом HTML5 через javascript. Приложение предназначено для использования в организации и обычно имеет около 300 пользователей, но мы хотим масштабировать до 1000 пользователей или около того.
Обычно соединения с API будут осуществляться в локальной сети, поэтому качество и задержка соединения будут хорошими, хотя не исключено случайное использование через Интернет, где соединения могут быть медленнее и с большим запаздыванием через 3G / 4G.
Два варианта, которые мы подумали:
Интерфейс сделает несколько одновременных асинхронных вызовов API для загрузки различных компонентов интерфейса.
- Плюсы: простота.
- Минусы: Больше подключений к серверу.
Контроллер внешнего интерфейса выполнит один вызов API, передавая в качестве параметров объекты, которые необходимо получить.
- Плюсы: только одно подключение к серверу, хотя сервер сделает несколько подключений к базе данных.
- Минусы: требуются механизмы как в интерфейсе, так и в API. Это усложняет дизайн.
Дополнительные пояснения: будут разные ресурсы ... / Product ... / Locations и т. Д. Эти ресурсы могут быть получены отдельно, но будет другой абстрактный ресурс ... / screen? Product & Locations, который будет извлекать оба за один вызов.
/screen?Product&Locations
- плохой подход, по крайней мере со всем моим опытом разработки REST API и веб-приложения, которое их использует. С чисто монолитной точки зрения (например, в Ruby on Rails) наличие маршрута,/screen
который загружаетProduct
иLocation
ресурсы, и все в порядке. Однако, с точки зрения REST , вы никогда не захотите, чтобы маршрут загружал более одной (если вы не присоединяетесь к таблицам, чтобы получить больше данных одновременно). Что/screen
нужно сделать , это загрузить основную страницу макета и вы AJAX вашего API для получения данных (Product
,Location
и т.д.)./screen
будет AJAXHTTP GET
для/products/popular
и/locations
). Ваш API не должен быть тем, который выполняет несколько загрузок, потому что маловероятно, что вы будете отображать данные таким же образом в веб-приложении против Android, например.