Продолжаем изучать Yii - RESTful?

Сейчас столкнулся со следующей проблемой, точнее даже не с проблемой…

Есть backend часть сайта. Выбираем управление новостями… Решил разделить все на CRUD, соответственно есть create action, list/read action, delete и update. И черт меня дернул поэксперементировать с REST…

И тут пришлось гуглить… $_POST и $_GET в php есть, но нету встроенной поддержки delete и put запросов. Зарубежные умельцы изают curl api для этого… нашел так же вариант с php://input (который щас и тестирую)…

Ну и собственно возникает вопрос - а как правильно? и есть ли что-нить для REST в yii? думал тут написать класс для обработки http request (основываясь на CHttpRequest)… то есть добавить обработку данных и их получение (все-таки не считаю красивым в коде юзать $_POST и $_GET)…

или может вообще отказаться от rest?

может у кого есть какие-то идеи на эту тему?

А что ты понимаешь под РЕСТ? Насколько я знаю, это подход к созданию веб-сервиса, альтернатива WSDL, например.

Нафиг это в даминке я не знаю, но даже если и надо. Зачем тебе PUT и DELETE методы? Если будешь их поддерживать - сразу открываешь нихреновенькую такую дырку :) Конечно, ты все защитишь, но все же.

Если стоит задачу управлдять сайтом с помощью дусктоп-приложения, то вполне можно решить все либо сделав веб-сервис на WSDL (В Иии это встроено), либо написав свои классы для Rest. Видел статейтку - простой Rest-сервис с помощью Reflection API.

Ну как это нафиг? :) если есть возможность разделить запросы по смыслу - очень даже не плохо…

о какой дырке ты говоришь?

Не вижу смысла извращаться над пхп, который этого не поддерживает.

Я лично понятия неимею как обеспечивать безопасность при запросе PUT. Дырка в том, что ты даешь возможность использовать методы, позволющие менять файлы на сервере. Если поддержки этих методов нет, то поменять невозможно чисто теоретически.

В общем делай если сильно хочется, я бы не делал. Я бы ограничился REST запросами гет и пост. Гет - для получения, пост - для изменения.

Я так понимаю, у тебя JS-frontend? А Экста шарит делать PUT/DELETE запросы?

никаких прав на изменение файлов на сервере нету :) через put я получаю только данные а не команды…

гет - получение - пост изменение/добавление/удаление?

js-backend если быть точнее, да extjs умеет делать и put и delete запросы

Хм… реализуешь - дай посмотреть :)

Думаю копать надо в сторону веб-сервиса Иии, посмотреть как он поступает с командами.

Но в принципе все должно быть построено на reflection. Почему копать вебсерсвис - потом что может не придется какие-то части самому писать.

я бы вообще сделал проще - extend CHttpRequest и все дела)) просто лень лишний класс мутить… попробую веб-сервис, хотя qiang сказал что он сделает поддержку REST в yii

реализую что? рест или админку? :) новости в админке уже пашут, ну и основа соответственно, щас юзеров делаю

Рест конечно. Интересно все же.

Че я в админке не видел :) Экстовго интрерфейса насмотрелся до рези в глазах :)

Что-то я не видел чтобы "HTTP протокол не поддерживает PUT+DELETE"

Даже firebug все пишет - GET|POST|DELETE|PUT. Ну по крайней мере у меня все работает безо всяких там доп. полей :)

а на счет схемы да, так проще :) добавить 1 параметр в пост запрос…

вот пример js кода на extjs



                    Ext.Ajax.request({


                        url: '/backend/news/',


                        method: 'DELETE',


                        success: function(response){


                            var o = Ext.decode(response.responseText);


                            if (o.success)


                                Ext.each(recs,function(rec){


                                	this.store.remove(rec);


                                });


                            else Ext.Msg.alert('Error', o.errors);


                        },


                        failure: function(o){


                            console.log(o);


                        },


                        params: {


                            newsId: ids.join(',')


                        }


                    });    


а что, я разве говорил что хттп не поддерживает пут и делит??? А что тогда подерживает?

Я, с твоих слов говорил что пхп не работает с этими запросами.

Ага, и че, вот эта штука обрабатывается пхп-скриптом? А как ты получаешь переменную newsId?

Тут просто VIT написал пост и видимо уже удалил))))

Да, эта штука обрабатывается php скриптом и все гениальное просто

вот код обработки



$put = array();


parse_str(file_get_contents('php://input'), $put);


и дальше обращается $put['newsId']

и будет нам Щастье))))

Прикольно. Только смысла особого не вижу, если передавать только ИДшники. Это экзотика :) ПУТ и ДЕЛИТ вообще-то для работы с файлами предназначены, я ж потому и ругался сначала :)

Ну в смысле то что можно - понятно; вопрос - зачем?

Ну на сколько я почитал мануал к extjs и вообще про rest - это далеко не только для файлов… считается что это true web 2.0))))

а зачем… спроси чего полегче)) сам не знаю, жил се спокойно с постом и гетом… а щас еще и пут и делит на свою задницу нашел))

ну и так, на заметку статья на хабре http://habrahabr.ru/blogs/php/46032/

http://ru.wikipedia.org/wiki/REST

Написано немного, но и то не все поняно ;)

Это все вопросы архитектуры, в прикладном плане это касается в первую очередь создания веб-сервисов.