Вот как-то решил написать небольшой портал и, заглядывая наперед, решил сделать для него отдельный веб сервис, на котором будет храниться вся логика, а сайт просто будет вытягивать нужные данные и отдавать страницу пользователю. Я новичок, поэтому, если что-то делаю не так, буду рад услышать ваши замечания
Возникла проблема с аутентификацией. Я использую yii как для сайта, так и для веб сервиса. Первое что пришло в голову: юзер заполняет форму, отправляет её на сайт, сайт отправляет данные веб сервису, тот генерирует токен, записывает его в базу, возвращает юзеру, юзер записывает его в куки, при следующем обращении к веб сервису юзер передает токен и если они совпадают то функция выполняется…
Но в таком случае на самом сайте, в каждом экшене надо проверять аутентифицирован пользователь или нет, и не получится настроить права доступа. В общем, я, честно говоря, в затруднении, нормальный это подход или нет, может кто-то может предложить что-то более правильное.
Ну я впринципе понял, т.е. мне надо инкапсулировать все методы в моделях(getNews, addComment, rateComment и т.д.) и создать контроллер ApiController в котором будет REST Api, так?
Цели у вас очень непонятные. API подразумевает использования несколькими клиентами. У вас же клиентом будет только ваш сайт (обычная и мобильная версия)? А это не стрельба из пушки по воробьям? В фильтре контроллера можно определить, что браузер мобильный, и рендерить другой слой/представление, заточенный именно под смартфон/планшет. Отдельного сервиса тут не надо.
А может даже адаптивной верстки будет достаточно. Это конечно если вам надо именно мобильная версия сайта, а не отдельное приложение на Андроид/iOS
Если вы создадите REST контроллер для News и думаете как им безопасно пользоваться, то наверное прийдется поступать так же как поступает API тот же Вконтакте. Секретные ключи, токены… В общем Yii тут не при чем IMHO.
Вы извините но определитесь что вам нужно - сайт или мобильное приложение.
Сделайте сначала сайт, с человеческой аутентификацией, так как это положено. Хотите CSRF, куки и тому подобное - пожалуйста.
Для мобильного приложения - будет отдельно API, и не стоит над ним сейчас заморачиваться, так как реализуется оно очень быстро. Вот там уже и шлите токены, шифры, явки и пароли.
Если же нужна мобильная версия сайта, то просто отдельный layout или адаптивная верстка.
Собственно говоря не вижу смысла в ваших действиях, IMHO делать API в yii так как вы хотите нужно только если привязывать js фреймворк (ext, angular, backbone), но и тут есть замедление работы с сервером, но это имеет смысл, так как сервер разгружается (не нужно ему делать фронт) при большой посещаемости. Эти вещи довольно сложные, и для тренировки на "зайцах", не подходят.
Когда мне нужно было поднять свой веб сервис я воспользовался замечательной статьей на хабре. Поищите в гугле по теме "Пишем SOAP клиент-серверное приложение на PHP". Там все просто и популярно расписано.