Упражнение. Создание приложения с помощью настраиваемого обработчика
В этом упражнении вы создадите и запустите бессерверное приложение с помощью Go.
Создание каркаса для приложения
Начните с формирования шаблона приложения с помощью расширения Функций Azure в Visual Studio Code.
- Выберите Вид>Палитра команд.
- Выберите Функции Azure: Создать проект.
- Выберите папку. Как правило, это будет текущая папка.
- В разделе Выбор языка выберите Пользовательский обработчик.
- В разделе Выбор шаблона для первой функции выберите HttpTrigger.
- Присвойте приложению имя, например hello.
- Выберите анонимный уровень авторизации. Вы сможете изменить это позже, если захотите.
Теперь у вас есть проект, который выглядит примерно так:
hello/
function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json
Создание приложения
Следующий ряд шагов направлен на создание приложения, которое может отвечать на HTTP-триггер.
Создайте файл с именем server.go в корневом каталоге проекта.
Наполните server.go следующим содержимым:
package main import ( "fmt" "io" "log" "net/http" "os" )Приведенный выше код импортирует все библиотеки, необходимые для создания HTTP-приложения и поиска переменных среды.
Добавьте следующий код после инструкций импорта:
func main() { customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT") if !exists { customHandlerPort = "8080" } mux := http.NewServeMux() // mux.HandleFunc("/api/hello", helloHandler) fmt.Println("Go server Listening on: ", customHandlerPort) log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux)) }Функция
main()вызывается самостоятельно. Первая строка кода указывает, как она считывается из переменнойFUNCTIONS_CUSTOM_HANDLER_PORTсреды:customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")Затем функция проверяет наличие порта. При его отсутствии функции назначается порт 8080:
if !exists { customHandlerPort = "8080" }Следующий код создает экземпляр HTTP-сервера:
mux := http.NewServeMux()Последняя важная строка — это та строка, которая начинает прослушивание на определенном порту и сигнализирует, что она готова к приему запросов с помощью метода
ListenAndServe():log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))Добавим остальной код. Сначала найдите следующую строку и раскомментируйте ее:
// mux.HandleFunc("/api/hello", helloHandler)Между инструкциями импорта и функцией
main()добавьте следующий код:func helloHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if r.Method == "GET" { w.Write([]byte("hello world")) } else { body, _ := io.ReadAll(r.Body) w.Write(body) } }Функция
helloHandler()задает для типа содержимого значениеapplication/json. Оно либо отвечает "hello world", либо отвечает с указанным текстом, если он имеется.
Выполнить приложение
Создание кода на этом этапе завершено, но для работы этого сценария необходимо выполнить некоторые настройки. Необходимо указать расположение исполняемого файла, чтобы хост функций мог его найти. Кроме того, необходимо настроить маршрутизацию и указать, что это приложение работает с HTTP-триггерами, а не с другими типами привязок.
Из терминала выполните команду
go build server.goв корневом каталоге проекта:go build server.goНа этом шаге создается исполняемый файл с именем server в MacOS и Linux или server.exe в ОС Windows.
Откройте файл host.json и найдите элемент
defaultExecutablePathвнутриcustomHandler. Укажите./serverв macOS и Linux или.\\server.exeв ОС Windows.В элементе
customHandlerдобавьте элементenableForwardingHttpRequestи присвойте ему значениеtrue. Теперь элементcustomHandlerдолжен выглядеть следующим образом:"customHandler": { "description": { "defaultExecutablePath": "./server", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest" : true }Из терминала выполните команду
func startв корневом каталоге проекта. Это приведет к запуску приложения Функций.func startВ конце выходных данных вы увидите примерно такой результат:
Functions: hello: [GET,POST] http://localhost:7071/api/helloДля этого откройте в браузере адрес
http://localhost:7071/api/hello. Вы должны увидеть выходные данные "hello world".
Поздравляем! Вы разработали бессерверное приложение в Go.