2014-02-06 1 views
1

У меня есть существующее приложение, которое было построено на Yii Framework для управления винных погребов. Я использовал стандартную утилиту Gii для создания исходных CRUD-контроллеров/моделей/представлений. Я значительно изменил код для удовлетворения моих потребностей в навигации, посмотрите & ощущение и функциональность. Теперь я начинаю разработку сопутствующего мобильного (Android) приложения, которое нужно будет потреблять и создавать некоторые данные (получить список вин в моем подвале - GET, добавить новое вино в подвал - POST), который может быть использованным во время покупок/дегустации вин. Я не собираюсь раскрывать все модели/параметры контроллера в качестве веб-служб, а только определенный набор функций.Yii - Добавление RESTFull API к webapp

Мой вопрос действительно проблема с дизайном. Должен ли я добавлять методы API к существующим контроллерам CRUD или я должен создать новый «API-контроллер» для каждой из моделей (или один apiController - это еще один вариант, который я видел)? Мое мышление - отдельные контроллеры API. Это позволило бы мне быстрее обновить/развернуть конкретные изменения API и логически разделить этот интерфейс. Этот API должен быть аутентифицирован, и я, вероятно, буду реализовывать OAuth в будущей версии.

BTW, я просмотрел расширение RESTFullYii, и я не смог точно понять, как он работает. Мне бы очень хотелось увидеть пример рабочего приложения, а не только фрагменты кода.

ответ

0

Да, перейдите для отдельных контроллеров. Возможно, вы даже захотите настроить отдельное приложение, которое разделяет некоторые из ваших моделей и конфигураций приложений, но также позволяет создавать более индивидуальные ощущения.

Кроме того, при планировании, как вы будете версии вашей Апи, как это, скорее всего, нужно изменить вниз по дороге, все еще нуждается в поддержке вашей старой Android App

2

Я предлагаю вам создать новый контроллер. Например, ApiController. Вы делаете все свои действия, такие как actionAddWine. Таким образом, вы можете назвать это действие, как:

http://example.com/index.php?r=api/addWine 

Преимущества делать это, является то, что у вас есть все ваши модели, и вы просто должны взаимодействовать с режимами через REST. Чтобы создать простой REST api, вы можете проверить следующий документ, который действительно объясняется просто.

How-To: Create a REST API

Если вам нравится указанная статья, Вы можете отправить ответ клиенту просто с помощью _sendResponse() метода. Другое дело - делать аутентификации и подобные вещи, которые легко достижимы с использованием метода вашего контроллера init().

Другой способ - создать модуль для вашего приложения. Если вы хотите полностью разделить свой API с другими кодами, вы можете создать модуль. Вы можете создавать модули с GII. Преимущество модуля заключается в том, что вы можете разделить свои разделы. Например, ваши действия будут:

http://example.com/index.php?r=api/wine/add 

в выше URL вы вызываете действие в api модуле и wine контроллер, который его зовут add.

Обратите внимание, что вы можете использовать свои модели в модуле, импортировав их.

+0

Мне очень нравится предложение использовать модуль. URI более точно соответствует истинному формату REST и реализации. И я думаю, что я могу обновить UrlManager, чтобы удалить «index.php» и получить его до http://example.com/api/wine/add. Это также позволяет мне обновлять api, если мне нужно, просто сопоставляя с примером http: //.com/api/v2/wine/add (с отображением по умолчанию для самой последней версии, если оно не находится в URI. – JimK