Мой проект был бы своего рода craiglist, местом, где пользователи могли бы публиковать объявления (объекты жизни, автомобили, квартира и т.д.). Итак, аутентификация, страница профиля, создание контента, отображение продаваемых объектов и т.д.
Я разработал очень большую часть бэкэнда: у меня есть API RESTful в трехуровневой архитектуре, разработанной в Java. Он создает связь с db, чтобы предоставить мне разные URL-адреса и отправить мне соответствующий JSON.
Пример URL:
http://api.mywebsite.fr/user?userid=1 отсылает меня обратно:
{"user": {"username": "jdoe1234", "email", "[email protected]"}}
У меня есть URL-адреса для всех действий, выполняемых на всем сайте (создание анонса, последние обновления данных... все, и я тщательно объявил их POST, GET, UPDATE, DELETE и т.д.). Существует также oAuth для защиты API от запросов, которые не разрешены для токена.
Что все для "серверного" аспекта, я думаю, что с этим нет никаких проблем.
Но если все действия управляются веб-сервисом, я не вижу интереса, который мог бы принести мне большую платформу на стороне сервера, такую как Symfony/cakePHP, Zend и т.д., Чтобы делать HTTP-запросы в разных точках входа, извлекать JSON и заполнить HTML.
Поэтому я посмотрел на клиентскую инфраструктуру, такую как Angular, Ember и так далее. Сначала это казалось очень подходящим для моего случая: возможность HTTP-запросов, управление тем, что делать в случае успеха или ошибки, непосредственно использовать полученный JSON для заполнения представления и т.д.
Мне даже не удалось сделать свой выбор между angularjs и Ember, оба очень похожи, но с выпуском Angular v2 я боюсь ремонтопригодности v1 (если я выберу Angular, это будет v1, потому что большинство учебников и вопросы относятся к Угловому 1.X).
Я не знаю, правильно ли я делаю это, выбирая систему на стороне клиента, я боюсь, что они "бразильские" (не уверенные в этом слове, извините) меня. Кроме того, он полностью создан в браузере, поэтому пользователь может полностью изменить весь код и данные, которые я предоставляю. Мне это кажется странным.
Я хочу быть абсолютно уверен в технологии, которую я использую, если я сделаю это приложение доступным для публики, например. Я хочу делать все правильно, чтобы избежать проблем с ремонтопригодностью или безопасностью.
Резюме. С теми вещами, которые у меня уже есть (webservice/api), неплохо ли использовать клиентскую инфраструктуру, такую как Angular, или я должен оставаться на большой стороне сервера, например Symfony/Zend и т.д.? Зная, что я позиционирую себя в контексте, в котором эта платформа будет широко использоваться (сопоставимый трафик).
Я бы сказал - зависит от того, хотите ли вы в будущем быть более опытным парнем или бэкэндом. Если вы хотите быть полным разработчиком стека, то он не применяется.
На мой взгляд, как Symfony/Zend, так и другие крупные серверные структуры не так увлекательны, как динамические интерфейсные JavaScript-фреймворки, такие как Ember/Angular/React.
Кроме того, если у вас уже есть RESTful API и аутентификация OAuth, реализованная в бэкэнд-части, я бы пошел с Ember. Зачем? Ember Data - отличный инструмент для общения с API-интерфейсом. Он созрел, он лениво загружает записи, когда они нужны, и он очень настраиваемый.
он полностью создан в браузере, поэтому пользователь может полностью изменить весь код и данные, которые я предоставляю...
Ember создал встроенную защиту, такую как дезинфекция данных, которые отображаются в ней, на языке шаблонов - HTMLBars. Кроме того, существует стандарт CORS и политики безопасности контента (CSP), который реализован в Ember.
Я хочу быть абсолютно уверен в технологии, которую я использую, если я сделаю это приложение доступным для публики, например. Я хочу делать все правильно, чтобы избежать проблем с ремонтопригодностью или безопасностью.
В Ember вы можете создавать зрелые, безопасные, готовые к производству приложения, но в какой-то мере вам нужно устраивать свои навыки Ember для создания такого амбициозного веб-приложения, но это часть построения каждого приложения.
С тем, что у меня уже есть (webservice/api), неплохо ли использовать клиентскую инфраструктуру, такую как Angular?
Да, это очень популярное решение для использования стека MEAN или использования API Ember + RESTful.
Почему я должен выбирать Ember вместо Angular (у которых есть более крупные сообщества/учебники/ответы на вопросы)?
Угловое имеет более обширные сообщества/учебники/ответы на вопросы, но когда я начал какой-то побочный проект с помощью Angular, чтобы узнать его возможные преимущества перед Ember, я был удивлен, как в этом сообществе не было единодушного решения, чтобы сделать одно. Таким образом, вместо быстрого поиска, как объявлять и использовать директивы (я думаю, это было то, что меня смутило), я должен сделать еще одно исследование, путь которого является лучшим. Кроме того, существует множество способов настройки проекта (где размещать пользовательские директивы, разные угловые объекты), и вам нужно сделать другое исследование, которое нужно выбрать. Я закончил использование репо здорового глотки в качестве шаблона, но вы можете видеть, что он не обновлялся в течение 8 месяцев, но я думаю, что за эти 8 месяцев у Angular было много изменений, и я не уверен, что это репо это лучший выбор.
В Ember у вас есть инструмент Ember CLI, который построен с принципом конвенции по конфигурации. У вас также есть Ember Data, который использует стандарт API JSON - если у вас сейчас нет совместимой с JSON API-серверной стороны, вы можете написать собственный адаптер для нормализации ответов сервера или изменить способ ответа на бэкэнд. В Ember у вас нет всей этой головной боли и различных лучших решений, чтобы сделать одну основную вещь, зависящую от того, кого вы спрашиваете.
Что означает "одностраничное приложение"?
Одностраничное приложение - это, в основном, страница, которая не требует перезагрузки всех активов и HTML при навигации. Это преимущество перед PHP - когда пользователь переезжает в другое место, он загружает только новые данные для этого маршрута. Больше информации здесь.
Позволяют ли мне эти рамки создавать реальные маршруты? (www.myapp/profil/userid и т.д.)
Да, конечно. Вам даже не нужно #
в вашем URL-адресе. С простым правилом перезаписи и небольшим количеством логики для маршрута profile
и указанного profile/:userid
пути profile/:userid
, когда пользователь откроет URL-адрес www.myapp/profile/userid
он будет автоматически отправлен в маршрут profile
, а userid
будет интерпретироваться как параметр маршрута, поэтому вы можете взять этот userid
и найти запись пользователя из магазина в режиме крючка model
.
Клиент = скорость, сервер = стабильность
Обновления баз данных JS раз в неделю. Не-Js-back-end один раз в год
Клиентская сторона зависит от поведения в зависимости от браузера. Назад относится только к машине, но не к окружающей среде.
Я выбрал FE coz. Я устал отлаживать код, записывая значения переменных в базу данных, чтобы реально увидеть, что происходит в контроллерах -_-