Exercício - Use um manipulador personalizado para criar um aplicativo
Neste exercício, você criará e executará um aplicativo sem servidor usando o Go.
Andaime o aplicativo
Comece criando um scaffolding do aplicativo, usando a extensão Azure Functions no Visual Studio Code.
- Selecione Exibir>paleta de comandos.
- Selecione Azure Functions: Create New Project.
- Selecione uma pasta, geralmente a pasta atual.
- Em Selecione um idioma, selecione Manipulador personalizado.
- Em Selecione um modelo para sua primeira função, selecione HttpTrigger.
- Dê um nome ao aplicativo, como Olá.
- Selecione um nível de autorização de anônimo. Você pode alterar isso mais tarde, se desejar.
Agora você tem um projeto que se parece com isto:
hello/
function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json
Criar a aplicação
A próxima série de etapas é sobre a criação de um aplicativo que possa responder a um gatilho HTTP.
Crie um arquivo chamado server.go na raiz do projeto.
Dê a server.go o seguinte conteúdo:
package main import ( "fmt" "io" "log" "net/http" "os" )O código anterior importa todas as bibliotecas necessárias para criar um aplicativo HTTP e procurar variáveis de ambiente.
Adicione o seguinte código após as instruções de importação:
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)) }A
main()função é invocada por si mesma. A primeira linha do código indica como ele lê aFUNCTIONS_CUSTOM_HANDLER_PORTpartir da variável de ambiente:customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")Em seguida, a função verifica se a porta existe. Se não, a função é atribuída porta 8080:
if !exists { customHandlerPort = "8080" }O próximo código instancia uma instância do servidor HTTP:
mux := http.NewServeMux()A última linha de importância é aquela que começa a ouvir uma porta específica e sinaliza que está pronta para receber solicitações, com o método
ListenAndServe():log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))Vamos adicionar o código restante. Primeiro, localize a seguinte linha e descomente-a:
// mux.HandleFunc("/api/hello", helloHandler)Entre as instruções import e a
main()função, adicione o seguinte código: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) } }A
helloHandler()função define o tipo de conteúdo comoapplication/json. Ele responde com "hello world" ou o corpo postado, se houver.
Executar a aplicação
Você terminou de criar o código neste momento, mas precisa fazer algumas configurações para que esse cenário funcione. Você precisa apontar onde está seu arquivo executável, para que o host da função possa encontrá-lo. Você também precisa configurar o roteamento e declarar que este aplicativo lida com gatilhos HTTP e nenhum outro tipo de associações.
A partir de um terminal, execute
go build server.gona raiz do projeto:go build server.goEsta etapa cria um arquivo executável chamado servidor no macOS e Linux ou server.exe em um sistema operacional Windows.
Abra o ficheiro host.json e localize o elemento
defaultExecutablePathdentro docustomHandler. Especifique./serverno macOS e Linux ou.\\server.exeem um sistema operacional Windows.Sob o
customHandlerelemento , adicione oenableForwardingHttpRequestelemento e dê-lhe o valortrue. SeucustomHandlerelemento agora deve ter esta aparência:"customHandler": { "description": { "defaultExecutablePath": "./server", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest" : true }A partir de um terminal, execute
func startna raiz do projeto. Isso inicia o aplicativo Funções.func startNo final da saída, você verá uma saída semelhante a:
Functions: hello: [GET,POST] http://localhost:7071/api/helloEm um navegador, vá para
http://localhost:7071/api/hello. Você deve ver a saída "hello world".
Parabéns! Você desenvolveu um aplicativo sem servidor no Go.