Меню навигации Play framework 2.x (Scala) — Рекомендуется получать некоторые данные из базы данных при каждом запросе

#scala #playframework

#scala #playframework

Вопрос:

У меня вопрос….Я структурирую веб-сайт с помощью Play 2.7 (Scala). Я создаю что-то вроде cms .. где вы можете создавать Страницы, События, оставлять комментарии и так далее…Я застрял при создании навигационного меню, которое должно быть создано на основе некоторых данных, хранящихся в таблицах моей базы данных (категории).

Моя проблема в том, что эти «данные» должны извлекаться при каждом запросе (домашняя страница, страница событий, страница сообщений), и я не уверен в наилучшем подходе к этому. Я думал об этих 3 решениях:

  1. Внедрите мою службу категорий на каждый контроллер и передавайте для каждого действия данные меню навигации в представлении

  2. Создайте фильтр, который перед тем, как каждый контроллер вызовет службу, извлекает данные и передает их через запрос, в конечном итоге в моем шаблоне получите данные из «объекта запроса»

  3. (не уверен, что это возможно) создайте модуль или помощник, который можно использовать непосредственно в шаблоне, что-то вроде @GiveMeTheMenu(), который возвращает Seq[Категория]

Что вы думаете? любой совет будет полезен!! спасибо вам всем.

Комментарии:

1. Лучший подход заключается в создании API.

2. Вы имеете в виду REST API? для внутренних данных и чего-то вроде AngularJS для клиентской части?

3. ДА. Просто немного изюминки, например, безопасное действие в вашем API, чтобы сделать его потрясающим 🙂

4. Для управления доступом к API и запросами

Ответ №1:

Что-то вроде этого @LucatT. Надеюсь, это поможет.

routes

 GET     /menu                  controllers.HomeController.giveMeTheMenu()
  

HomeController.scala

 def giveMeTheMenu() =  SecureUserAction.async { implicit request =>
  // Codes here and fetch data from DB..
}
  

Комментарии:

1. Спасибо… Я думал о чем-то другом, но да, это мог бы быть правильный подход. Мне интересно, могло бы быть лучше создать все приложения на основе REST api .. возможно, с аутентификацией JWT сверху, используя также Akka {http и actors} и JsonSpraySupport. Спасибо вам за ваш ответ.