Маршрутизация в Yii2: от базовой настройки до кастомизации
Лучшие практики REST API в Yii2: работа с URL и HTTP-методами

Yii2: Как создать идеальные URL для вашего API

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



Базовая конфигурация URL-менеджера

Имея готовые классы ресурсов и контроллеров, можно получить доступ к ресурсам, используя URL вроде http://localhost/index.php?r=user/create, подобно тому, как вы это делаете с обычными Web-приложениями.

На деле вам обычно хочется включить «красивые» URL-адреса и использовать все преимущества HTTP-методов (HTTP-verbs). Например, чтобы запрос POST /users означал обращение к действию user/create. Это может быть легко сделано с помощью настройки компонента приложения urlManager в конфигурации приложения следующим образом:

'urlManager' => [
        'enablePrettyUrl' => true,
        'enableStrictParsing' => true,
        'showScriptName' => false,
        'rules' => [
            ['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
        ],
    ]

Как работают URL-правила RESTful API

Главная новинка в коде выше по сравнению с управлением URL-адресами в Web-приложениях состоит в использовании [[yii\rest\UrlRule]] для маршрутизации запросов к RESTful API. Этот особый класс URL-правил будет создавать целый набор дочерних URL-правил для поддержки маршрутизации и создания URL-адресов для указанного контроллера (или контроллеров). Например, приведенный выше код является приближенным аналогом следующего набора правил:

[
        'PUT,PATCH users/<id>' => 'user/update',
        'DELETE users/<id>' => 'user/delete',
        'GET,HEAD users/<id>' => 'user/view',
        'POST users' => 'user/create',
        'GET,HEAD users' => 'user/index',
        'users/<id>' => 'user/options',
        'users' => 'user/options',
    ]

Этим правилом поддерживаются следующие точки входа в API:

  • GET /users: разбитый на страницы список всех пользователей;
  • HEAD /users: общая информация по списку пользователей;
  • POST /users: создание нового пользователя;
  • GET /users/123: подробная информация о пользователе 123;
  • HEAD /users/123: общая информация о пользователе 123;
  • PATCH /users/123 и PUT /users/123: обновление пользователя 123;
  • DELETE /users/123: удаление пользователя 123;
  • OPTIONS /users: список HTTP-методов, поддерживаемые точкой входа /users;
  • OPTIONS /users/123: список HTTP-методов, поддерживаемые точкой входа /users/123.

Настройка и расширение правил маршрутизации

Вы можете настроить опции only и except, явно указав для них список действий, которые поддерживаются или которые должны быть отключены, соответственно. Например:

[
        'class' => 'yii\rest\UrlRule',
        'controller' => 'user',
        'except' => ['delete', 'create', 'update'],
    ],

Вы также можете настроить опции patterns или extraPatterns для переопределения существующих шаблонов или добавления новых шаблонов, поддерживаемых этим правилом. Например, для включения нового действия search в точке входа GET /users/search настройте опцию extraPatterns следующим образом:

[
        'class' => 'yii\rest\UrlRule',
        'controller' => 'user',
        'extraPatterns' => [
            'GET search' => 'search',
        ],
    ]

Как вы могли заметить, ID контроллера user в этих точках входа используется в форме множественного числа (как users). Это происходит потому, что [[yii\rest\UrlRule]] автоматически приводит идентификаторы контроллеров к множественной форме. Вы можете отключить такое поведение, назначив свойству [[yii\rest\UrlRule::pluralize]] значение false.

Info: Приведение ID контроллера к множественной форме производится в методе [[yii\helpers\Inflector::pluralize()]]. При этом соблюдаются правила английского языка. Например, box будет преобразован в boxes, а не в boxs.

В том случае, если автоматическое приведение к множественному числу вам не подходит, вы можете настроить свойство [[yii\rest\UrlRule::controller]], где указать явное соответствие имени в URL и ID контроллера. Например, код ниже ставит в соответствие имя u и ID контроллера user.

[
        'class' => 'yii\rest\UrlRule',
        'controller' => ['u' => 'user'],
    ]

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню