Упражнение. Создание приложения с помощью настраиваемого обработчика
В этом упражнении вы создадите и запустите бессерверное приложение с помощью 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/ioutil" "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, _ := ioutil.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.