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