Implementando uma API com Fiber – Aprenda Golang
Essa performance toda vem da base na qual ele é implementado, pois o Fasthttp tem uma performance muito superior ao net/http quando confrontado com uma quantidade grande de requisições por segundo. Como a própria documentação do Fasthttp diz, para poucas requisições os ganhos são praticamente imperceptíveis.
Tendo dito tudo isso, vamos começar implementação da nossa API instalando a nossa principal dependência.
Feito isso, vamos criar uma função para retornar o famoso Hello World!.
Agora vamos escrever nossa função principal do programa, ou seja, nossa função main.
app.Get("/", HelloHandler)
Para levantar nossa API é só executar um go run main.go e depois um curl http://localhost:3000 para testar.
Se você já utilizou outros frameworks ou pelo menos viu nosso post sobre como implementar API com gorilla/mux, você deve ter notado que, quando a API feita com fiber está pronta para receber requisições, o próprio framework exibe algumas informações no terminal.
exemplo fiber
Outra diferença que podemos ver nessa implementação básica, é que ao definir uma rota, nós também já definimos qual o tipo de requisição que a rota vai aceitar.
Seguindo na mesma linha do que fizemos com gorilla/mux, vamos modificar um pouco nossa rota para ela aceitar um parâmetro, para que possamos retornar Hello NOME ou invés de só Hello World.
Para passar um parâmetro na URL, tudo que precisamos fazer é adicionar um : seguido do nome do parâmetro.
Já na nossa função HelloHandler vamos usar o método .Params do fiber.Ctx para recuperar o valor passado na URL.
return c.SendString(fmt.Sprintf("Hello, %s!", c.Params("name")))
Para testar, é só subir a API com o go run e depois executar um curl http://localhost:3000/Tiago.
Em ambos os testes que fizemos, a requisição obteve um texto como resposta. Para que a resposta seja um JSON, precisamos fazer a seguinte mudança na função HelloHandler.
O método JSON, além de já setar o header da resposta como application/json, aceita uma interface{}, ou seja, você pode passar uma struct para ele e a conversão será feita automágicamente para JSON.
Para finalizar, vamos adicionar um endpoint para receber um POST com um JSON.
Antes de escrever a função, vamos adicionar um struct para facilitar nosso decode.
Agora vamos adicionar a função PersonHandler.
func PersonHandler(c *fiber.Ctx) error {
if err := c.BodyParser(&p); err != nil {
return c.SendString(fmt.Sprintf("Nome: %s - Idade: %d\n", p.Name, p.Age))
Por último, em nossa função principal, vamos adicionar uma rota para atender requisições do tipo POST.
app.Post("/person", PersonHandler)
Para testar, precisamos subir a API com o go run main.go e executar o comando abaixo:
$ curl -X POST http://localhost:3000/person -H "Content-Type: application/json" -d '{"name": "Tiago Temporin", "age": 31}'