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/ioutil" "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 será lido aFUNCTIONS_CUSTOM_HANDLER_PORT
partir 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, _ := ioutil.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.go
na raiz do projeto:go build server.go
Esta etapa cria um arquivo executável chamado servidor no macOS e Linux, ou server.exe em um sistema operacional Windows.
Abra o arquivo host.json e localize o
defaultExecutablePath
elemento dentro delecustomHandler
. Especifique./server
no macOS e Linux ou.\server.exe
em um sistema operacional Windows.Sob o
customHandler
elemento , adicione oenableForwardingHttpRequest
elemento e dê-lhe o valortrue
. SeucustomHandler
elemento agora deve ter esta aparência:"customHandler": { "description": { "defaultExecutablePath": "./server", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest" : true }
A partir de um terminal, execute
func start
na raiz do projeto. Isso inicia o aplicativo Funções.func start
No final da saída, você verá uma saída semelhante a:
Functions: hello: [GET,POST] http://localhost:7071/api/hello
Em 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.