Criando uma API REST em Go (Golang) com Erro Personalizado
Go, também conhecida como Golang, é uma linguagem de programação eficiente e poderosa para construir aplicativos escaláveis. Neste artigo, vamos explorar como criar uma API REST simples em Go, seguindo as melhores práticas de organização de código, incluindo o uso de erros personalizados.
Estrutura de Diretórios
Primeiro, vamos definir a estrutura de diretórios do nosso projeto:
myapi/
. ├── main.go
. ├── api/
. │. ├── handlers/
. │. │. ├── resource_handler.go
. │. ├── models/
. │. │. ├── resource.go
. │. ├── routes/
. │. │. ├── routes.go
. ├── config/
. │. ├── config.go
. ├── utils/
. │. ├── utils.go
Aqui está uma breve descrição dos diretórios e arquivos:
• main.go: O ponto de entrada da aplicação, onde inicializamos o servidor HTTP e definimos as rotas.
• api/handlers/resource_handler.go: Este arquivo contém o manipulador de solicitações HTTP para o recurso que nossa API irá gerenciar.
• api/models/resource.go: Define a estrutura de dados que representa o recurso.
• api/routes/routes.go: Aqui, definimos as rotas da API e associamos cada rota ao manipulador apropriado.
• config/config.go: Gerenciamos configurações globais da aplicação, como configurações de banco de dados.
• utils/utils.go: Contém funções utilitárias que podem ser compartilhadas em toda a aplicação.
Código de Exemplo
Agora, vamos dar uma olhada no código de exemplo para criar nossa API REST e o código para um erro personalizado. Vamos começar com o main.go:
// main.go
package main
import (
"net/http"
"myapi/api/routes"
)
func main() {
routes.SetupRoutes()
http.ListenAndServe(":8080", nil)
}
No arquivo main.go, inicializamos o servidor HTTP e configuramos as rotas chamando routes.SetupRoutes().
Em api/handlers/resource_handler.go, implementamos o manipulador de recursos e o código para o erro personalizado:
// api/handlers/resource_handler.go
package handlers
import (
"encoding/json"
"net/http"
"errors"
)
type Resource struct {
ID. int. `json:"id"`
Name string `json:"name"`
}
var resources []Resource
func GetResources(w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(resources)
}
func CreateResource(w http.ResponseWriter, r *http.Request) {
var newResource Resource
if err := json.NewDecoder(r.Body).Decode(&newResource); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
resources = append(resources, newResource)
json.NewEncoder(w).Encode(newResource)
}
func SimulateError() error {
return errors.New("Ocorreu um erro personalizado")
}
Aqui, adicionamos uma função SimulateError() que retorna um erro personalizado. Além disso, lidamos com erros de decodificação JSON em CreateResource().
Em api/routes/routes.go, configuramos as rotas da API:
// api/routes/routes.go
package routes
import (
"net/http"
"myapi/api/handlers"
)
func SetupRoutes() {
http.HandleFunc("/api/resources", handlers.GetResources)
http.HandleFunc("/api/resource", handlers.CreateResource)
}
Esta função SetupRoutes() associa URLs a manipuladores específicos.
Conclusão
Este é um exemplo simples de como criar uma API REST em Go, incluindo o uso de erros personalizados. Lembre-se de que em uma aplicação real, você precisará adicionar recursos como autenticação, validação de entrada e persistência de dados em um banco de dados. Use este exemplo como ponto de partida e construa sua API de acordo com suas necessidades.
Espero que este artigo tenha sido útil para você começar a criar uma API REST em Go. Boa codificação!