[Решено] Работа с REST

Всё что касается построения API
Ответить
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

[Решено] Работа с REST

Сообщение nepster »

Начал изучать все это дело, прочитал доки, немного статей и решил практиковать. Примеры буду приводить на модуле статических страниц.

Итак, что я понял и что мне нужно:
get - все статические страницы
get - просмотр статической страницы
post - создать страницу
put - редактировать страницу
delete - удалить страницу

В контроллере, я сделал следующее поведение:

Код: Выделить всё

            'verbs' => [
                'class' => \yii\filters\VerbFilter::className(),
                'actions' => [
                    'index' => ['get'],
                    'view' => ['get'],
                    'create' => ['get','post'],
                    'update' => ['get','put'],
                    'delete' => ['delete']
                ]
            ], 
Тут понятно, идем дальше. А дальше собственно и будет организация запросов, где и возникли вопросы.

С get и post запросами понято, теперь delete и put:


Например возникает ситуация, когда нужно что-то удалить используя простую ссылку (пример из гридвью):

Код: Выделить всё

                'delete' => function ($url, $model) {
                     return Html::a( '<span class="icon-remove3"></span>', ['/pages/default/delete', 'id' => $model['page_id']], 
                        ['data' => [
                            'confirm' => 'Удалить?',
                            'method' => 'delete',
                        ]]);
                }    
Второй пример, это отправка данных из формы:

Код: Выделить всё

<?php $form = ActiveForm::begin(['method' => $model->isNewRecord ? 'POST' : 'PUT' ]); ?>

Все работает, но тут появляются следующие вопросы:

1) В заголовках все-равно приходит пост (вместо delete или put)
Изображение

2) Я пытался понять как работает ссылки с указанным методом, понял, что там что-то делает js файл, но не понял что именно, разъясните пожалуйста (скорее всего Yii2 тоже мутит, что-то с формами, так как put запросы html не поддерживает)?

3) Собственно работа проделана, а по сите ничего не поменялось, объясните еще раз смысл REST ?
Последний раз редактировалось nepster 2014.10.08, 11:45, всего редактировалось 1 раз.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Работа с REST

Сообщение anton44eg »

REST удобен во многих случаях, например если вы рендерите страницу на стороне клиента, создаете бекенд для мобильных приложений и тд и тп
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Работа с REST

Сообщение nepster »

почему как был пост запрос так он и есть?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Работа с REST

Сообщение anton44eg »

потому что вы сабмитите html форму средствами браузера, а браузеры только GET и POST запросы делают
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Работа с REST

Сообщение nepster »

Но сам сервер различает PUT например, если заменить на ПОСТ, он ответит ошибкой. Тоесть все работает как нужно, кроме того что на сервер всеравно идет POST запрос, который он всеравно понимает как PUT к примеру.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Работа с REST

Сообщение anton44eg »

ок, тогда в чем проблема?
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Работа с REST

Сообщение nepster »

проблема в том, что я не понимаю почему в запросе пишется POST и я хотел бы разобраться в этом. Тоесть я уже вышел с того уровня "Работает, ну и хрен с ним", я хочу знать почему и как это работает, Смекаете ? =)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Работа с REST

Сообщение zelenin »

nepster писал(а):проблема в том, что я не понимаю почему в запросе пишется POST и я хотел бы разобраться в этом. Тоесть я уже вышел с того уровня "Работает, ну и хрен с ним", я хочу знать почему и как это работает, Смекаете ? =)
обычно такие запросы делаются curl'ом или другими инструментами (советую обертку guzzle). Там есть GET, POST, DELETE, PUT и прочие/любые виды запросов. Но форма на веб-странице отправляет только GET и POST. Но есть способ эмуляции через отправку '_method' => 'PUT'. Yii понимает такую эмуляцию и распознает запрос как PUT.

Но тем не менее, REST нужен для php или js клиентов, а они нативно умеют отсылать все виды запросов.
Аватара пользователя
chungachguk
Сообщения: 435
Зарегистрирован: 2012.07.17, 11:52

Re: Работа с REST

Сообщение chungachguk »

Может в этом всё дело http://programmers.stackexchange.com/qu ... html-forms
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Работа с REST

Сообщение nepster »

Угу с html понял, спасибо.

Теперь собственно вопросы появились, js я так понял умеет отсылать PUT и DELETE
https://cloud.githubusercontent.com/ass ... 9c3370.png

А Yii2, отсылает запрос со своей эмуляцией через _method, а вот если использовать guzzle, то нужно переопределить кучу всего (точнее актив форм и Html::a)?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Работа с REST

Сообщение zelenin »

nepster писал(а):вот если использовать guzzle, то нужно переопределить кучу всего (точнее актив форм и Html::a)?
не смешивайте мухи с котлетами. корректнее ставьте вопросы. Еще раз: формами не делают запросы к rest.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Работа с REST

Сообщение anton44eg »

как вы собираетесь использовать guzzle в html? для чего вам РЕСТ, обьясните
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Работа с REST

Сообщение nepster »

прежде всего обучение.

До этого момента я понял следующее:
К примеру у нас есть 4 основных действия: Просмотр, Редактирование, Создание и Удаление. Читая про РЕСТ, я понял, что к каждому действия должен быть определенный запрос с правильным методом.

Судя по вашим ответам я не правильно понял суть REST. Тоесть REST нужно использовать только если вы разрабатываем какое-то api или работает с иным апи, например платежными системами и тп. ?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Работа с REST

Сообщение anton44eg »

Примерно так. Или делаете SPA
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Работа с REST

Сообщение zelenin »

то есть работаете с rest извне или с помощью ajax.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Работа с REST

Сообщение anton44eg »

да
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Работа с REST

Сообщение nepster »

Понял, спасибо. А есть смысл оставлять эмулированный REST в той-же админке, о чем писал в 1 топике ?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Работа с REST

Сообщение zelenin »

nepster писал(а):Понял, спасибо. А есть смысл оставлять эмулированный REST в той-же админке, о чем писал в 1 топике ?
зачем?
Вы вообще путаете REST, запросы и все такое. REST - это способ организовать api. В админке у вас эмуляция запросов.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Работа с REST

Сообщение anton44eg »

Попробуйте написать что-то на angular - поймете что к чему + познакомитесь с интересной технологией :)
Ответить