Рубрики
Без рубрики

Настройка параметров HTTP-маршрута в функциях Azure 2.x с помощью Python

Обзор того, как HTTP маршрутизация работает в функциях Azure для обзора высокого уровня трех … Помечено Python, Azurefunctions, Serverless.

Обзор того, как работает 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”