Выбор шаблона 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
Обработчик: ПервыйОбработчик
Это происходит потому, что /* сопоставляется с любым путем к ресурсу, т. е. является наиболее общим шаблоном из всех возможных. А так как сопоставление происходит по порядку, то для любого запроса будет выбран первый шаблон.