@slip31

Что выбрать для REST и RBAC?

В сотый раз поднимаемый здесь вопрос
На чем писать веб-сервис.
Есть фронтенд на ангулар и готовые json-файлы, которые пора уже менять на REST.
Какой фреймворк выбрать для:
1) REST
2) Работа с базой (куча связывающих таблиц, запись сразу в несколько моделей)
3) Интернационализация
4) Работа с ролями пользователя (ACL или RBAC) - требуется очень много сущностей отдавать разным пользователям (этому доступ к этому, а этому сюда нельзя). Динамическое присваивание.
Рассматривал Yii2 , но может попробовать что-то другое? silex, phalcon? Для них есть какие-то бандлы?
Или может вообще уйти от php (вопрос времени не стоит)
  • Вопрос задан
  • 2808 просмотров
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Для REST будет идеален фреймворк основанный на Symfony/HttpKernel (имплементящий HttpKernelInterface). Это даст вам возможность абстрагироваться от запросов, применять реверс-прокси кешеры а так же возможность модифицировать запросы/ответы по слоям, этим упростив архитектуру. В частности быстро прикрутить CORS, сделать авторизацию на уровень выше и т.д. можно будет за счет http middlewares и в частности stackphp. Есть JMSSeializer (который можно будет заменить на свой сериализатор, если будет стоять вопрос о производительности), который позволит вам декларативно описать правила сериализации/десереализации ресурсов и вынести все это дело на слой выше, абстрагируясь таким образом от всего этого в коде вашего приложения. Так же возможность быстро прикрутить версионизацию апишки.

Если у вас кучи связей и вопрос производительности не стоит остро (только поддерживаемость кода) - Doctrine ORM. Если производительность - острый вопрос, стоит смотреть в сторону использования DBAL и оберточек. Если у вас все будет сделано по уму (код напрямую с репозиториями не работает и вообще ничего не знает о Doctrine), то заменить слой работы с базой на что-то пошустрее будет не проблема.

По интернационализации так же проблем особо не должно возникнуть. Есть экстеншены для doctrine, есть symfony/translation и кучи других либ.

Если вам нужна гибкая система аутентификации и авторизации, разграничение прав гибкое и все такое - symfony/security удовлетворит все юз-кейсы и позволит все это покрыть тестами.

Так что из перечисленных вами вариантов - Silex. Но если хочется еще и меньше бойлерплейт кода писать, то Symfony. Учитывая что по времени вы сильно не ограничены, то будет время разобраться как делать все правильно. Вопросы производительности стоит решать по мере возникновения проблем, вообще у REST с этим не так много проблем. Узкие места можно переписать на чем-то другом, например на go, можно оптимизировать persistance-layer, сериализацию (при простых запросах JMSSerializer дает большой оверхэд по времени, так что можно в особых случаях написать свой оптимизированный под определенный response сериализатор) и т.д.

Но в целом вы можете использовать отдельные компоненты в связке с тем же Silex. Вообще все упирается больше в количество бойлерплейт и сервисного кода. В целом если вы будете подходить грамотно к построению архитектуры приложения можно на чем угодно написать нормально. Вопрос только в том что какие-то вещи где-то правильно сделать сложнее.
Ответ написан
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
пишите на том фрейворке который знаете, если не знаете никакой, то django + tastypie или django + rest framework, silex не используйте, он гавно полное. Можно симфони, но запаритесь в нём разбираться.
Ответ написан
mva
@mva
CEO, CTO, Lua/Gentoo/IPv6 Pioneer
кстати, на грани бреда:
я, вот, например, решил последовать примеру CloudFlare и TaoBao (ну и менее именитых товарищей) и пишу новый проект (CMS, в каком-то роде) на lua_nginx_module+resty-*
Впринципе, мне очень нравится, но данный подход требует изучения Lua (хотя, по опыту, он не сложнее PHP)
Ответ написан
Ваш ответ на вопрос

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

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