Настройка конечной точки HTTP в функциях AzureCustomize an HTTP endpoint in Azure Functions

В этой статье вы узнаете, как функции Azure позволяют создавать масштабируемые API.In this article, you learn how Azure Functions allows you to build highly scalable APIs. Функции Azure поставляются с набором встроенных триггеров и привязок HTTP, которые упрощают создание конечной точки на различных языках, включая Node.js, C# и т. д.Azure Functions comes with a collection of built-in HTTP triggers and bindings, which make it easy to author an endpoint in a variety of languages, including Node.js, C#, and more. В этой статье вы настроите триггер HTTP для выполнения определенных действий в структуре API.In this article, you'll customize an HTTP trigger to handle specific actions in your API design. Вы также подготовитесь к увеличению API, интегрируя его с Прокси-серверы Функций Azure и настроив макеты API.You'll also prepare for growing your API by integrating it with Azure Functions Proxies and setting up mock APIs. Эти задачи выполняются поверх среды вычислений без сервера, поэтому вам не нужно беспокоиться о масштабировании ресурсов. Вы можете просто сосредоточиться на логике API.These tasks are accomplished on top of the Functions serverless compute environment, so you don't have to worry about scaling resources - you can just focus on your API logic.

Предварительные требованияPrerequisites

В этой статье в качестве отправной точки используются ресурсы, созданные при работе со статьей Создание первой функции на портале Azure.This topic uses as its starting point the resources created in Create your first function from the Azure portal. Выполните шаги в этой статье для создания приложения-функции, если вы еще не сделали этого.If you haven't already done so, please complete these steps now to create your function app.

Итоговая функция будет использоваться в оставшейся части этой статьи.The resulting function will be used for the rest of this article.

Вход в AzureSign in to Azure

Войдите на портал Azure с помощью своей учетной записи Azure.Sign in to the Azure portal with your Azure account.

Настройка функции HTTPCustomize your HTTP function

По умолчанию функция триггера HTTP настроена для приема любого HTTP-метода.By default, your HTTP trigger function is configured to accept any HTTP method. Можно также использовать URL-адрес по умолчанию, http://<yourapp>.azurewebsites.net/api/<funcname>?code=<functionkey> .You can also use the default URL, http://<yourapp>.azurewebsites.net/api/<funcname>?code=<functionkey>. В этом разделе вы измените функцию, чтобы она отвечала только на запросы GET с помощью /api/hello .In this section, you modify the function to respond only to GET requests with /api/hello.

  1. Перейдите к своей функции на портале Azure.Navigate to your function in the Azure portal. В меню слева выберите Интеграция , а затем в разделе триггервыберите http (REQ) .Select Integration in the left menu, and then select HTTP (req) under Trigger.

    Настройка функции HTTP

  2. Используйте параметры триггера HTTP, как указано в следующей таблице.Use the HTTP trigger settings as specified in the following table.

    ПолеField Образец значенияSample value ОписаниеDescription
    Шаблон маршрутаRoute template /hello/hello Определяет пути, используемые для вызова этой функцииDetermines what route is used to invoke this function
    Уровень авторизацииAuthorization level АнонимныеAnonymous (Необязательно.) Предоставляет доступ к функции без ключа APIOptional: Makes your function accessible without an API key
    Выбранные методы HTTPSelected HTTP methods GETGET Разрешает использовать только выбранные методы HTTP для вызова этой функцииAllows only selected HTTP methods to be used to invoke this function

    /apiПрефикс базового пути не был включен в шаблон маршрута, так как он обрабатывается глобальным параметром.You didn't include the /api base path prefix in the route template, because it's handled by a global setting.

  3. Щелкните Сохранить.Select Save.

Дополнительные сведения о настройке функций HTTP см. в статье привязки HTTP в функциях Azure.For more information about customizing HTTP functions, see Azure Functions HTTP bindings.

Тестирование APITest your API

Затем протестируйте функцию, чтобы увидеть, как она работает с новой поверхностью API:Next, test your function to see how it works with the new API surface:

  1. На странице функция в меню слева выберите код + тест .On the function page, select Code + Test from the left menu.

  2. Выберите получить URL-адрес функции в верхнем меню и скопируйте URL-адрес.Select Get function URL from the top menu and copy the URL. Убедитесь, что теперь используется /api/hello путь.Confirm that it now uses the /api/hello path.

  3. Скопируйте URL-адрес в новую вкладку браузера или в предпочтительный клиент REST.Copy the URL into a new browser tab or your preferred REST client.

    Браузеры используют GET по умолчанию.Browsers use GET by default.

  4. Добавьте параметры в строку запроса в URL-адресе.Add parameters to the query string in your URL.

    Например, /api/hello/?name=John.For example, /api/hello/?name=John.

  5. Нажмите клавишу ВВОД, чтобы подтвердить, что он работает.Press Enter to confirm that it's working. Вы должны увидеть ответ "Привет Джон".You should see the response, "Hello John."

  6. Можно также попробовать вызвать конечную точку с помощью другого метода HTTP, чтобы убедиться, что функция не выполняется.You can also try calling the endpoint with another HTTP method to confirm that the function isn't executed. Для этого используйте клиент RESTFUL, например, фигурную скобку, POST или Fiddler.To do so, use a REST client, such as cURL, Postman, or Fiddler.

Общие сведения о прокси-серверахProxies overview

В следующем разделе вы создадите API через прокси-сервер.In the next section, you'll surface your API through a proxy. Функция "Прокси-серверы Функций Azure" позволяет вам перенаправлять запросы к другим ресурсам.Azure Functions Proxies allows you to forward requests to other resources. Конечная точка HTTP определяется так же, как и триггер HTTP.You define an HTTP endpoint just like with HTTP trigger. Однако вместо написания кода для выполнения при вызове этой конечной точки вы предоставляете URL-адрес удаленной реализации.However, instead of writing code to execute when that endpoint is called, you provide a URL to a remote implementation. Это позволяет объединить несколько источников API в одну поверхность API, что очень удобно для использования клиентами, что полезно, если вы хотите создать API как микрослужбы.Doing so allows you to compose multiple API sources into a single API surface, which is easy for clients to consume, which is useful if you wish to build your API as microservices.

Прокси-сервер может указывать на любой ресурс HTTP, например:A proxy can point to any HTTP resource, such as:

Дополнительные сведения о прокси-серверах см. в статье Работа с функцией "Прокси-серверы Функций Azure".To learn more about proxies, see Working with Azure Functions Proxies.

Создание первого прокси-сервераCreate your first proxy

В этом разделе вы создадите новый прокси-сервер, который выступает в качестве внешнего интерфейса для общего API.In this section, you create a new proxy, which serves as a frontend to your overall API.

Настройка среды интерфейсаSetting up the frontend environment

Повторите шаги для создания приложения-функции, чтобы создать приложение-функцию, в котором вы создадите свой прокси-сервер.Repeat the steps to Create a function app to create a new function app in which you will create your proxy. Этот URL-адрес нового приложения выступает в качестве внешнего интерфейса для нашего API, а приложение-функция, которое вы ранее редактировали, выступает в качестве серверной части.This new app's URL serves as the frontend for our API, and the function app you were previously editing serves as a backend.

  1. Перейдите к своему новому приложению-функции интерфейса на портале.Navigate to your new frontend function app in the portal.

  2. Выберите Функции платформы, а затем — Параметры приложения.Select Platform Features and choose Application Settings.

  3. Прокрутите вниз до пункта Параметры приложения, где хранятся пары "ключ-значение" и создайте новый параметр с ключом HELLO_HOST .Scroll down to Application settings, where key/value pairs are stored, and create a new setting with the key HELLO_HOST. Задайте узел приложения-функции внутреннего сервера, например <YourBackendApp>.azurewebsites.net, в качестве его значения.Set its value to the host of your backend function app, such as <YourBackendApp>.azurewebsites.net. Это значение является частью URL-адреса, скопированного ранее при тестировании функции HTTP.This value is part of the URL that you copied earlier when testing your HTTP function. Вы укажете этот параметр при конфигурации позднее.You'll reference this setting in the configuration later.

    Примечание

    Мы рекомендуем использовать параметры приложения для настройки узла, чтобы прокси-сервер не зависел от жестко заданной среды.App settings are recommended for the host configuration to prevent a hard-coded environment dependency for the proxy. Использование настроек приложения означает, что вы можете перемещать конфигурацию прокси-сервера между средами. Параметры приложения для конкретной среды будут применяться.Using app settings means that you can move the proxy configuration between environments, and the environment-specific app settings will be applied.

  4. Щелкните Сохранить.Select Save.

Создание прокси-сервера в интерфейсеCreating a proxy on the frontend

  1. Вернитесь к своему внешнему приложению-функции на портале.Navigate back to your front-end function app in the portal.

  2. В меню слева выберите учетные записи- посредникии нажмите кнопку Добавить.In the left-hand menu, select Proxies, and then select Add.

  3. На странице Новая учетная запись-посредник используйте параметры, приведенные в следующей таблице, а затем выберите создать.On the New Proxy page, use the settings in the following table, and then select Create.

    ПолеField Образец значенияSample value ОписаниеDescription
    ИмяName HelloProxyHelloProxy Понятное имя, используемое только для управленияA friendly name used only for management
    Шаблон маршрутаRoute template /api/remotehello/api/remotehello Определяет пути, используемые для вызова этого прокси-сервераDetermines what route is used to invoke this proxy
    Внутренний URL-адресBackend URL https://%HELLO_HOST%/api/hello Определяет конечную точку, к которой должен быть отправлен запросSpecifies the endpoint to which the request should be proxied

    Настройка функции HTTP

    Прокси-серверы Функций Azure не предоставляет /api префикс базового пути, который должен быть добавлен в шаблон маршрута.Azure Functions Proxies doesn't provide the /api base path prefix, which must be included in the route template. %HELLO_HOST%Синтаксис ссылается на созданный ранее параметр приложения.The %HELLO_HOST% syntax references the app setting you created earlier. Разрешенный URL-адрес будет указывать на исходную функцию.The resolved URL will point to your original function.

  4. Попробуйте создать новый прокси-сервер, скопировав URL-адрес прокси-сервера и проверив его в браузере или с помощью избранного HTTP-клиента:Try out your new proxy by copying the proxy URL and testing it in the browser or with your favorite HTTP client:

    • Для анонимной функции используйте: https://YOURPROXYAPP.azurewebsites.net/api/remotehello?name="Proxies" .For an anonymous function use: https://YOURPROXYAPP.azurewebsites.net/api/remotehello?name="Proxies".
    • Для функции с использованием авторизации: https://YOURPROXYAPP.azurewebsites.net/api/remotehello?code=YOURCODE&name="Proxies" .For a function with authorization use: https://YOURPROXYAPP.azurewebsites.net/api/remotehello?code=YOURCODE&name="Proxies".

Создание макета APICreate a mock API

Далее вы будете использовать прокси-сервер для создания макета API для вашего решения.Next, you'll use a proxy to create a mock API for your solution. Этот прокси-сервер позволяет выполнять разработку клиентов, не требуя полностью реализованной серверной части.This proxy allows client development to progress, without needing the backend fully implemented. В дальнейшем в разработке можно создать новое приложение-функцию, которое поддерживает эту логику и перенаправить прокси-сервер.Later in development, you can create a new function app, which supports this logic and redirect your proxy to it.

Чтобы создать этот макет API, мы создадим новый прокси-сервер, на этот раз используя редактор службы приложений.To create this mock API, we'll create a new proxy, this time using the App Service Editor. Чтобы начать работу, перейдите к своему приложению-функции на портале.To get started, navigate to your function app in the portal. Выберите функции платформыи в разделе средства разработки найдите редактор службы приложений.Select Platform features, and under Development Tools find App Service Editor. Редактор службы приложений откроется на новой вкладке.The App Service Editor opens in a new tab.

В левой области навигации выберите proxies.json.Select proxies.json in the left navigation. В этом файле хранится конфигурация всех прокси-серверов.This file stores the configuration for all of your proxies. Если вы используете один из методов развертывания функций, этот файл будет поддерживаться в системе управления версиями.If you use one of the Functions deployment methods, you maintain this file in source control. Дополнительные сведения об этом файле см. в разделе Расширенная конфигурация.To learn more about this file, see Proxies advanced configuration.

Если вы выполнили следующие действия, proxies.jsдолжны выглядеть следующим образом:If you've followed along so far, your proxies.json should look like as follows:

{
    "$schema": "http://json.schemastore.org/proxies",
    "proxies": {
        "HelloProxy": {
            "matchCondition": {
                "route": "/api/remotehello"
            },
            "backendUri": "https://%HELLO_HOST%/api/hello"
        }
    }
}

Затем добавьте макет API.Next, you'll add your mock API. Замените proxies.jsв файле следующим кодом:Replace your proxies.json file with the following code:

{
    "$schema": "http://json.schemastore.org/proxies",
    "proxies": {
        "HelloProxy": {
            "matchCondition": {
                "route": "/api/remotehello"
            },
            "backendUri": "https://%HELLO_HOST%/api/hello"
        },
        "GetUserByName" : {
            "matchCondition": {
                "methods": [ "GET" ],
                "route": "/api/users/{username}"
            },
            "responseOverrides": {
                "response.statusCode": "200",
                "response.headers.Content-Type" : "application/json",
                "response.body": {
                    "name": "{username}",
                    "description": "Awesome developer and master of serverless APIs",
                    "skills": [
                        "Serverless",
                        "APIs",
                        "Azure",
                        "Cloud"
                    ]
                }
            }
        }
    }
}

Этот код добавляет новый прокси, GetUserByName без backendUri Свойства.This code adds a new proxy, GetUserByName, without the backendUri property. Вместо вызова другого ресурса он изменяет ответ по умолчанию от прокси-серверов, используя переопределение ответа.Instead of calling another resource, it modifies the default response from Proxies using a response override. Переопределение запроса и ответа может также использоваться в сочетании с URL-адресом внутреннего сервера.Request and response overrides can also be used in conjunction with a backend URL. Эта методика особенно полезна при создании прокси-сервера для устаревшей системы, где может потребоваться изменить заголовки, параметры запроса и т. д.This technique is particularly useful when proxying to a legacy system, where you might need to modify headers, query parameters, and so on. Дополнительные сведения о переопределении запроса и ответа см. в этой статье.To learn more about request and response overrides, see Modifying requests and responses in Proxies.

Протестируйте макет API, вызвав конечную точку <YourProxyApp>.azurewebsites.net/api/users/{username} с помощью браузера или избранного клиента REST.Test your mock API by calling the <YourProxyApp>.azurewebsites.net/api/users/{username} endpoint using a browser or your favorite REST client. Замените {username} строковым значением, представляющим имя пользователя.Be sure to replace {username} with a string value representing a username.

Дальнейшие действияNext steps

В этой статье вы узнали, как создавать и настраивать API в функциях Azure.In this article, you learned how to build and customize an API on Azure Functions. а также объединять несколько API, включая макеты, в единую поверхность API.You also learned how to bring multiple APIs, including mocks, together as a unified API surface. Вы можете использовать эти методы для создания API любой сложности, работая в бессерверной вычислительной модели, предоставляемой Функциями Azure.You can use these techniques to build out APIs of any complexity, all while running on the serverless compute model provided by Azure Functions.

Следующие ссылки могут оказаться полезными при дальнейшей разработке API:The following references may be helpful as you develop your API further: