Выбор шаблона URL

Путь к ресурсу состоит из 0 или более сегментов, разделенных символом '/'. Например:

persons/add/ivan/ivanov

Шаблоны URL служат двум целям:

  • Выбрать метод-обработчик для заданного пути к ресурсу.
  • Предоставить удобный способ работы с параметрами, включенными в путь к ресурсу. А это, в свою очередь, позволяет использовать более наглядные URL для GET-запросов и передавать параметры в URL для простых POST-запросов.
    • Например, POST '/person/add/ivan/ivanov' можно трактовать как запрос на добавление нового пользователя с указанием имени и фамилии.
    • При этом из параметров запроса можно получить значение параметра по имени (Имя=ivan,Фамилия=ivanov).
    • Сравните это с передачей через параметры: POST '/person/add' и в теле запроса "name=ivan&surname=ivanov".

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

В случае если не удалось сопоставить путь к ресурсу ни с одним шаблоном, возвращает ответ с кодом HTTP 404 (Ресурс не найден).

В случае удачного сопоставления маршрутизация запроса продолжается в соответствии с выбранным шаблоном.

Пример выбора шаблона URL

Пусть в сервисе есть два шаблона URL:

ШаблоныUrl:
    -
        Имя: Первый
        Шаблон: /person/add/{Имя}/{Фамилия}
        Методы:
            -
                Метод: POST
                Обработчик: ПервыйОбработчик
    -
        Имя: Второй
        Шаблон: /*
        Методы:
            -
                Метод: ANY
                Обработчик: ВторойОбработчик

Первый шаблон нужен для обработки операции добавления новых пользователей. Второй шаблон можно использовать, например, для выдачи собственной страницы для ошибки 404 (Ресурс не найден), так как в этот шаблон попадают все запросы, которые не были сопоставлены с другими запросами.

При поступлении запроса POST /person/add/ivan/ivanov он будет сопоставлен с первым шаблоном и, соответственно, в параметры запроса будут добавлены: {Имя=ivan, Фамилия=ivanov}.

При поступлении запроса GET /person/add/1/2 будет выдана ошибка 405 (Недопустимый метод).

При поступлении запроса POST /person/add/ivan сработает второй шаблон и будет выдано собственное сообщение об ошибке.

Обратите внимание, что важен порядок шаблонов в описании. Например, если в примере выше поменять шаблоны местами, то второй шаблон никогда не будет сопоставлен.

ШаблоныUrl:
    -
        Имя: Второй
        Шаблон: /*
        Методы:
            -
                Метод: ANY
                Обработчик: ВторойОбработчик
    -
        Имя: Первый
        Шаблон: /person/add/{Имя}/{Фамилия}
        Методы:
            -
                Метод: POST
                Обработчик: ПервыйОбработчик

Это происходит потому, что /* сопоставляется с любым путем к ресурсу, т. е. является наиболее общим шаблоном из всех возможных. А так как сопоставление происходит по порядку, то для любого запроса будет выбран первый шаблон.