Я добавляю API к приложению Symfony, которое должно действовать как веб-сервис REST. Но есть несколько открытых вопросов.
Разные URI для ботов?
Я часто читаю «предложение» использовать URI, такие как /api/:id/[...]
, но я думаю, что они не будут соответствовать REST: независимо от того, бот или человек - тот же u nique r Источник: i .
Я спрашиваю, поскольку мое утверждение выше имеет смысл, но я не ожидаю, что все остальные виноваты.
Модификация существующих контроллеров?
Есть несколько причин, по которым мне нужна отдельная логика контроллера для обоих случаев:
- Нет сессионного входа в случае API-запросов
- должны быть созданы разные формы Symfony (например, виджеты вообще не требуются.)
- JSON / XML вместо вывода HTML
Я не хочу изменять существующие контроллеры. Согласно принципу Open-Closed классы должны быть открыты для расширения, но закрыты для изменений, а классы контроллеров уже используются в «производственной» среде.
Моя идея - использовать дополнительное поле заголовка HTTP (например, «X-UseApi»). Маршрутизация должна вызывать различные действия, оценивая ее. Это возможно внутри routing.yml? Как? У вас есть другие идеи?
Аутентификация
Вот как я реализовал бот-аутентификацию:
$user = Doctrine_Core::getTable('sfGuardUser')->findOneByUsername($params['user']);
if($user->checkPassword($params['password']))
{
//...
}
Но код выглядит как обходной путь для моих глаз. Есть ли лучшие решения для всей проблемы аутентификации REST? SfGuardPlugin / sfDoctrineGuardPlugin не соответствует условиям для таких случаев использования?
Спасибо заранее и ура,
елочки