Построение и тестирование REST API в Yii2

Вебинар-скринкаст о сравнении протоколов удалённого вызова процедур RPC, доступа к объектам SOAP и архитектуры REST для реализации API для работы с сайтом. Рассмотрели написание RESTFul API для проекта на Yii2 Framework и его тестирование с использованием Codeception:

Открыть на YouTube | Исходники примера

Приглашаю на следующие видеоуроки. Анонс и ссылку на эфир, как обычно, пришлю в отдельной рассылке по вебинарам:

И задавайте вопросы в комментариях. Заранее спасибо и до встречи в эфире!

Комментарии

 

Леша

Спасибо Дим. Очень кстати)))

Ответить

 

Ержан Шаймерденов

Спасибо, очень доступно и познавательно!

Ответить

 

Михаил

Дмитрий спасибо за выложенное видео, но 6 часов видео - это многовато! мне 3 дня езды на работу смотреть )))

Ответить

 

KOVALSKY

Ставим на ютюбе скорость плеера 1.5x и все становится чуть быстрее, но не менее понятно ;)

Ответить

 

Max Eyed

Спасибо, Дмитрий. Просто отлично!

Дурацкий вопрос: а как в редакторе импортировать классы без вызова контекстного меню?
Как, например, вот тут: https://youtu.be/jDj_JggZXsU?t=4h50m42s

Ответить

 

Дмитрий Елисеев

Поставить курсор после класса и нажать Ctrl + Пробел.

Ответить

 

Max Eyed

У меня на такое вместо импорта вставляется yii\filters\auth\ перед классом.

Ответить

 

Дмитрий Елисеев

Settings - Editor - General - Autoimport - Enable auto-import in namespace scope.

Ответить

 

Max Eyed

Включено!

Ответить

 

Денис Бондарь

Alt + Enter на классе и выбираете Import. Без контекстного меню, кажется, это не получится сделать.

Ответить

 

slo_nik

Добрый день.
Благодарю за ссылку, буду пересматривать и пробовать реализовать у себя. Вопросы, наверняка, будут после.

Ответить

 

ТимЛид

Как можно было элементарную тему растянуть на 6 часов?? Полнейший бред... читайте официальную доку, не в обиду автору.

Ответить

 

slo_nik

Сделайте лучше!
А мы посмотрим и оценим, насколько Ваш комментарий соответствует действительности.

Ответить

 

slo_nik

Добрый вечер, Дмитрий.
Пытаюсь пересматривать, но что-то постоянно отвлекает))) Ну не в этом дело.
Такой вопрос появился. По поводу повторного использования запроса(идемпотентность, если правильно запомнил).
Вы сказали, что запрос методом DELETE подпадает под это определение, что сколько бы не отправляли запрос на удаление несуществующего поста, всегда вернётся список остальных постов.
А правильно ли это? Может в этом случае возвращать ошибку, а не список постов?

p.s. приблизительно на 1:27 минуте.

Ответить

 

Дмитрий Елисеев

Чаще DELETE будет возвращать статус 204 No Content.

Ответить

 

Дмитрий

Привет теска, подскажи почему в API при генерации тестов не добавился метод haveFixtures?
конфиг норм, все перерыл уже

class_name: FunctionalTester
modules:
    enabled:
        - REST:
            depends: PhpBrowser
            url: 'http://api.link.yii/index-test.php'
            part: [json]
        - Yii2:
            part: [orm, fixtures] # тут главное указано что должен подгружать и методы фикстур
            entryScript: index-test.php

Codeception ставил глобально и переменную PATH поправил чтобы команда всегда была доступна.

Ответить

 

Дмитрий Елисеев

Замените FunctionalTester на ApiTester

Ответить

 

Дмитрий

не в этом дело, я и так уже пробовал... в общем нашел уже причину блин все делал по учебнику версия codeception была 2.1.11 обновил до 2.2.9 - все норм сгенерил с тем же конфигом

Ответить

 

Олег

Дмитрий, чуть-чуть оффтопа)) Подскажите, пожалуйста, как добавить зависимость в composer.json на примере https://github.com/par0noid/ts3admin.class

Ответить

 

Дмитрий Елисеев
composer require par0noid/ts3admin
Ответить

 

Олег

Благодарю, а я его пробовал omposer require par0noid/ts3admin.class

Ответить

 

Stevan

Дмитрий, you should consider making webinars and tutorials on English also, There is really a lack of Yii2 content in English language compared to other frameworks,

Ответить

 

slo_nik

Stevan, а может Вам подучить русский язык? )))

Ответить

 

Stevan

То за мене вероватно не би био неки проблем, али би онима који нису Словени могло да одузме мало више времена. Вероватно би научли таман за Руске туторијале за Yii3 :)

Ответить

 

slo_nik

Дмитирй, ещё раз благодарю за интересный вебинар.
Досмотрел почти до конца, чуть-чуть осталось)))
Такой вопрос.
Всё работает, тестируется и так далее.
При обновлении профиля сделал специально ошибку в имени атрибута(description)
В ProfileController есть такая проверка

        if ($model->save() === false && $model->hasErrors()) {
            throw new ServerErrorHttpException('Failed to update the object for unknown reason.');
        }

Если я правильно понимаю, то должно вернуться исключение, раз ошибка в атрибуте, а возвращается неизменённая модель, то есть старые данные.
Так и должно быть?

Ответить

 

Дмитрий Елисеев

Метод $model->load($post) загрузит только атрибуты из rules(), а остальные пропустит.

Ответить

 

slo_nik

Получается, что ошибка вернётся только в том случае, если не сохранится модель.
А если ошибка в имени атрибута, или что-либо похожее, то никакой ошибки не будет?
Не стоит заморачиваться с настройками реакции на такие ошибки?

Ответить

 

Дмитрий Елисеев

Обычно не заморачиваются.

Ответить

 

slo_nik

Дмитрий, а как разделить тестовые базы для restful и основного сайта?
Файлы test.php и test-local.php в api/config я настроил, прописал там тестовую базу.
Но если выполнить в консоли php yii_test migrate, то настройки будут браться из common/test.php и test-local.php

Ответить

 

Дмитрий Елисеев

Сделайте ещё один файл yii_test_api с подгрузкой api/config/test-local.php.

Ответить

 

Slo_nik Дмитрий

Благодарю, попробую. Я пытался продублировать yii_test в api директории, но ничего не получилось. Буду пытаться сделать как Вы советуете
И вот ещё такой вопрос.
На вебинаре не рассмтривался вопрос регистрации. Если делать регистрацию, то что в таком случае возвращать пользователю? Ссылку на подтверждение e-mail или сразу авторизировать и возвращать токен?
Как обычно делают регистрацию для api?

Ответить

 

Дмитрий Елисеев

Если нужно подтверждать - то отправьте письмо со ссылкой и верните 200 OK.

Ответить

 

Александр Сахнов

Спасибо

Ответить

 

Вячеслав

Вопрос конечно не по теме, но

как с помощью git checkout перейти на один коммит вверх

откатиться вниз git checkout head~1

это для того чтобы слить с github исходники и сначала до конца пройтись по всем коммитам

Заранее спасибо

Ответить

 

Дмитрий Елисеев

В Git комит хранит ссылку только на предыдущий. Если из коммита начинаются несколько веток, то верхних будет два. Поэтому можно так:

git checkout master && git checkout HEAD~15
git checkout master && git checkout HEAD~14
git checkout master && git checkout HEAD~13
...
Ответить

 

Дмитрий

Приветствую. Заметил одну неприятную вещь: связи по with не возвращаются. Т.е. при запросе

Post::find()->with(['user']); - получаем только посты:
{
    "id": 1,
    "user_id": 1,
    "title": "title 1",
    "content": "post 1 ",
    "_links": {
        "self": {
            "href": "http://api.rest-api/v1/posts/1"
        }
    }
}, 

а вот с ?expand=author, получаем автора.
как можно решить эту проблему? Заранее благодарю.

Ответить

 

Дмитрий

причем, в запросе связь участвует, (при "левой" связи - ошибка), а в самом ответе связи нет

Ответить

 

Дмитрий Елисеев
public function fields()
{
    return array_merge(parent::fields(), [
        'author' => 'user',
    ]);
}
Ответить

Оставить комментарий

Войти | Завести аккаунт


(никто не увидит)



Можно использовать теги <p> <ul> <li> <b> <i> <a> <pre>