Обзор того, как работает HTTP маршрутизация в функциях Azure
Для обзора высокого уровня трех популярных шаблонов маршрутизации HTTP см. Это Blog Post от Lori Macvittie из сетей F5. Движение вперед, когда я ссылаюсь на HTTP-маршрутизацию в контексте функций Azure для баланса этого поста блога, я имею в виду маршрутизацию на основе пути.
HTTP-маршрутизация в функциях Azure отвечает за сопоставление URI запрашивания для конечных точек и маршрутизации HTTP-запросов на эти конечные точки. Кроме того, функции Azure могут извлекать значения из URI, содержащихся в запросе, и используйте эти значения для обработки запроса. Последнее является полезным способом передачи нескольких параметров на триггеру HTTP.
Префикс маршрута
В качестве имени подразумевается, вы можете настроить или удалить префикс маршрута по умолчанию «API» для триггеров HTTP в функциях Azure. Смотрите эту документацию от Microsoft для справки. Чтобы изменить его, вы измените host.json файл и Добавить Следующая настройка конфигурации:
{ "extensions": { "http": { "routePrefix": "foo" } } }
В приведенном выше примере мы устанавливаем префикс маршрута на «Foo». Обратите внимание: этот параметр «Global» в том, что если вы принимаете более одной функции в приложении функции, этот параметр применится ко всем функциям. Учитывая глобальный характер обстановки, я не нашел много ценности в модификации по умолчанию.
Маршрутные параметры
Как указано выше, HTTP-маршрут может служить двум целям в функциях Azure: ARIS Capping Request URI к конечным точкам или обработке запроса. Маршруты определены в function.json Файл и настроен при запуске приложения функции. Согласно документации, имена параметров маршрута должны быть не пустыми и не могут содержать эти символы: {,},/.
Сопоставление запроса URI’s к конечным точкам
Этот шаблон, безусловно, самый легкий для реализации. Давайте пройдемся по примеру, где вы хотите провести две версии функции HTTP Trigger в одном приложении функции. В этом примере у нас есть функция триггера HTTP с именем «Имя». Чтобы добавить версию на маршрут, просто измените файл функции.json и Добавить Следующая настройка конфигурации:
«Маршрут»: «V1/FirstName»,
Теперь вы можете создать аналогичную функцию триггера HTTP с именем «FirstName2», изменить файл function.json и Добавить Следующая настройка конфигурации:
«Маршрут»: «V2/FirstName»,
Вы можете использовать эту функцию, чтобы убедиться, что вы не нарушаете совместимость с функциями, которые вы публикуете, или направить трафик в данную конечную точку.
Обработка запроса с параметрами HTTP-маршрута
Давайте пройдемся по примеру использования параметра маршрута для настройки обработки запроса. Рассмотрим шаблон Trigger HTTP по умолчанию, который принимает данные, переданные в параметр «Имя» в качестве ввода и выводит данные, переданные в функцию. Представьте, что вы хотите продлить эту функцию, чтобы занять как имя, так и фамилия, вы бы Добавить Следующее в вашей функции .json файл:
«Маршрут»: «Firstnastname/{firstname}/{фамилия}»
И вы измените свою функцию, чтобы отразить следующее:
def main(req: func.HttpRequest) -> func.HttpResponse: logging.info("Python HTTP trigger function processed a request.") firstname = req.route_params.get("firstname") lastname = req.route_params.get("lastname") return func.HttpResponse(f"Hello {firstname} {lastname}!")
Обратите внимание, что вы используете свойство “route_params” вместо свойства “Params”. Полная документация для класса httprequest для Python – это Здесь Анкет
Когда вы запускаете свою функцию локально, вы заметите, что URL был изменен из по умолчанию:
FirstNameLastName: [GET] http://localhost:7071/api/FirstNameLastName/{firstname}/{lastname}
Ограничения маршрута
Добавление ограничения на ваш параметр маршрута позволяет ограничить, как соответствуют маршруты. Общий синтаксис – это «{параметр: ограничение}». Например, если мы хотим ограничить нашу функцию FirstNameelastName только принять только альфа-символы для двух маршрутов, которые мы ранее определили, мы настроим его в функции .json, как показано ниже:
«Маршрут»: «FirstNameelastname/{firstName: Alpha}/{фамилия: альфа}»,
Учитывая плату за природу транзакции функций Azure, это отличный способ обеспечить, чтобы только действующие транзакции обрабатываются вашим функциям приложения. Для полного списка ограничений маршрута обратитесь к этой статье Здесь Отказ
Обратите внимание: обработка менструации маршрута не выполняется функциональным приложением, а вместо этого хоста функции Azure. Функция Azure Host вернет 404, если вы поставляете его плохое URI. Я охвачу эту тему в будущем сообщении в блоге о отладке параметров маршрута.
Обязательные по сравнению с опциональными параметрами маршрута
Вы можете пометить параметры http маршрута как опционально, что дает вам некоторую гибкость в вашем коде. ‘? символ отмечает параметр как необязательный и может возникнуть только в конце параметра. Например, если мы хотим отметить наш параметр маршрута последствий как необязательно в нашем предыдущем примере, мы будем настроить его в нашей функции .json, как показано ниже:
“Маршрут”: “Firstnameelastname/{firstName: Alpha}/{фамилия: альфа?}”,
Обратите внимание, что если вы не пропустите LASTNAME к вышеупомянутому URI, значение переменной фамилии в вашем функциональном коде будет Нет Отказ Например:
curl http://localhost:7071/api/FirstNameLastName/foo/bar Hello, foo bar! curl http://localhost:7071/api/FirstNameLastName/foo Hello, foo None!
Пожалуйста, убедитесь, что добавить правильную обработку ошибок в приложении функции, если вы пометите свои параметры HTTP маршрута в зависимости от ситуации.
Вот и сейчас, в моем следующем сообщении в блоге я буду подробно отладки параметров маршрутизации HTTP. Если у вас есть какие-либо отзывы, пожалуйста, пришлите мне записку на Gattjoseph на
Оригинал: “https://dev.to/joegatt/configuring-http-route-parameters-in-azure-functions-2-x-using-python-3m2o”