Задать вопрос
@Hellek
Люблю говорить и слышать суть

Как спроектировать front на vue.js и REST-api?

Вопрос не в том как отправлять асинхронные запросы. Вопрос именно по архитектуре приложения.
Front-часть строится на vue.js (nuxt.js), тут только представления, данных никаких нет.
Back-часть в данном случае на PHP, но это не так важно. REST он и есть REST.

В чём проблема:
1) Клиент запрашивает адрес /orders?page=1, к нему летит html+js
2) Когда JS загрузился vue-компонент запрашивает данные через апи, например /api/orders?page=1
И REST API и vue крутятся на одном сервере, в соседних папках лежат, но при этом клиенту приходится посылать 2 запроса на удалённый сервер, это как то костыльно выглядит. С одной стороны схема поможет разместить приложение на разных серверах в дальнейшем, поддерживать мобильные платформы (API не придётся переписывать), но сейчас это только минус, то что запрос идёт через DNS (поиск IP по доменному имени и отправка запроса на этот же сервер).

Вопрос, можно ли реализовать следующую схему:
1) Клиент запрашивает /orders?page=1
2) vue (тут можно и node.js прикрутить, если нужно) обращается к /api/orders?page=1 но не через DNS, а прямо на localhost.
3) Тут же прикручен server side rendering
4) В итоге клиенту приходит уже отрендеренная страничка, но с полноценным SPA функционалом. За счет SSR и однократного HTTP запроса скорость загрузки и отрисовки страницы возрастает в разы (ли)

p.s. в текущем варианте php и рендерит и подготавливает данные. Сам к себе внутри одного HTTP-запроса он прекрасно обращается и работает очень быстро, но я задолбался писать отдельно js/Jquery логику, а учитывая что это всё нужно строить компонентами, то ещё тяжелей
  • Вопрос задан
  • 10041 просмотр
Подписаться 5 Оценить Комментировать
Решения вопроса 1
@numfin
nuxtServerInit
routerMiddleware
Вроде даже и примеры на сайте есть...
Но держать нюкст ради рендера вью - имхо неадекватно.
Лучше страничку с json данными внутри скрипта отдать пользователю, а пользователь уже подгрузит и vue и все остальное.
Например: ставишь через vuecli webpack шаблон, делаешь сайт, делаешь build. Далее dist кидаешь в проект с пхп. Внутри index.html рендерите раздел script и в переменную гоните полученные с бд данные. Это хоть и менее деликатный способ, но куда более приятный в плане экономии ресурсов за счёт избавления от рендера nuxt и лишних запросов с того же nuxt к бд.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@LiguidCool
/orders?page=1

Это уже не REST

к нему летит html+js

Вернуться должен JSON
Ответ написан
если проблема в двух отдельных запросах для фронта и для данных то вам нужно смотреть сюда
https://ru.vuejs.org/v2/guide/ssr.html
Но имхо трогать SSR пока у тебя сайт не сможет отбить затраты на его внедрение, нет смысла.
Вся суть SPA в том, что первый запрос тебе должен отдать быстрый сервер, который обслуживает только статику, у него нет затрат на рендеринг страницы, частенько это делает nginx, а вот запросы к АПИ уже обслуживает медленный сервер, который поднимает Яву, ПХП, Питон ну или что угодно, для того чтобі сформировать тебе данные.

И да, SSR это как правило уже не PHP а node.js чтобы не дублировать бизнес логику
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы