Подтвердить что ты не робот

Одностраничное приложение - Frontend независимо от бэкэнд?

Я провел некоторое исследование, и я заметил, что во многих примерах приложения Symfony2/AngularJS объединены интерфейс и бэкэнд; например, представления используют Twig.

Я всегда думал, что возможно (и распространенная практика) создавать интерфейс и бэкэнд отдельно и просто присоединяться к ним API. В этом случае, если я хочу изменить фреймворк, я смогу сделать это без каких-либо проблем, и этого будет достаточно, чтобы поддерживать API.

Итак, каковы наилучшие методы для этого? Было бы здорово, если бы вы могли объяснить это мне и даже больше, если бы вы просто дали мне ссылку на хороший пример на github или что-то в этом роде.

4b9b3361

Ответ 1

Мы разрабатываем некоторые проекты, используя тот же подход. Не только я думаю, что у него нет никакого "побочного эффекта", но решение тоже очень элегантно. Обычно мы создаем бэкэнд в Node.js, и это просто сервер API (не обязательно полностью REST-совместимый). Затем мы создаем другое, отдельное веб-приложение для интерфейса, полностью написанное в HTML5/JavaScript (с или без Angular.js). Сервер API никогда не возвращает HTML, просто JSON! Даже структура индекса.

Есть много преимуществ:

  • Код очень чистый и элегантный. Связь между интерфейсом и бэкэнд осуществляется по стандартизованным методам. Сервер предоставляет некоторые API, и клиент может свободно их использовать.
  • Легче иметь разные команды для интерфейса и бэкэнд, и они могут работать свободно, не мешая друг другу. Дизайнеры, которые обычно имеют ограниченные навыки кодирования, тоже оценивают это.
  • Интерфейс - это просто статическое приложение HTML5, поэтому он может (и мы часто это делали) легко размещать на CDN. Это означает, что вашим серверам никогда не придется беспокоиться о статическом содержимом вообще, и их загрузка снижается, что экономит ваши деньги. Пользователи также счастливы, поскольку CDNs обычно очень быстро для них.

Некоторые подсказки, которые я могу дать вам, основываясь на нашем опыте:

  • Самая большая проблема заключается в аутентификации пользователей. Это не особенно сложно, но вы можете реализовать аутентификацию, используя, например, протоколы OAuth 2.0 для вашего внутреннего использования. Таким образом, приложение frontend будет действовать как клиент OAuth и получит токен аутентификации из бэкэнд. Вы также можете рассмотреть возможность переноса сервера аутентификации (с помощью OAuth) на другой отдельный ресурс с сервера API.
  • Если вы размещаете webapp на другом имени хоста (например, CDN), вам может потребоваться иметь дело с CORS и, возможно, с JSONP.
  • Язык, на котором вы пишете сервер, не очень важен. Мы сделали это на PHP (включая Laravel), хотя мы получили наилучшие результаты при использовании Node.js. Для Node.js мы опубликовали наш шаблон на GitHub на основе RestifyJS

Я задал несколько вопросов в прошлом, которые могут вас заинтересовать: