Criando um servidor REST com GO
소개
Hoje aprendi a criar servidores REST com o GO, e logo de cara fiquei impressionado pois não precisioni instalar nenhuma lib externa para subir o servidor, o GO já vem por padrão com módulos responsáveis por isso
구현
De inicio precisioni declarar uma struct que recebe a seguinte função
func (w WebServer) Serve() {
server := &http.Server{
ReadHeaderTimeout: 10 * time.Second, // tempo de timeout para leitura
WriteTimeout: 10 * time.Second, // tempo de timeout para escrita
Addr: ":8080", //porta da aplicação
Handler: nil, // handler da aplicação
ErrorLog: log.New(os.Stderr, "log: ", log.Lshortfile), // como será tratado o log da aplicação
}
err := server.ListenAndServe()
if err != nil {
log.Fatal(err) //caso tenha um erro na parte de servir paro a aplicação e coloco esse erro no log
}
}
Depois disso precisioni instalar a biblioteca
github.com/gorilla/mux
para fazer a parte das rotas que não vem com a biblioteca padrão do GOe biblioteca
github.com/codegangsta/negroni
중간 구현 미들웨어, Nesse caso o 미들웨어 로그E para fazer as rotas vai ser da seguinte forma
func MakeProductHandlers(r *mux.Router, n *negroni.Negroni, service application.ProductServiceInterface) {
r.Handle("/product/{id}", n.With(
negroni.Wrap(getProduct(service)),
)).Methods("GET", "OPTIONS")
}
O handler vai servir como um controller para pegar as requisições para a rota e a função getProduct vai ficar assim
func getProduct(service application.ProductServiceInterface) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
vars := mux.Vars(r)
id := vars["id"]
product, err := service.Get(id)
if err != nil {
w.WriteHeader(http.StatusNotFound)
return
}
err = json.NewEncoder(w).Encode(product)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
}
})
}
então quando o usuário chamar a rota
/product/{id}
o 핸들러 vai chamar a função getProducts e o Negroni vai rodar junto pois usei o wrap ao redor da função getProducts, ai a função getProduct vai ter um request e um responseWritter o request usamos para pegar os dados que o clienten enviou na requisição e o responseWritter e para escrever a resposta e mandar de volta para o usuário, que é quando uso o json.NewEncoder(w).Encode(product)
, para já mandar os dados formatados no formato de jsonPara iniciar o servidor criei um novo commando com o cobra cli chamado de http e nesse comando fiz o seguinte
s := server.MakeNewWebServer()
s.Service = &productService
fmt.Println("Web server is running on port 8080")
s.Serve()
Esse product service é apenas a conexão com o banco de dados não precisa se preocupar com ele, mas se quiser ver. Código completo ele está no meu Github.
Agora temos um webServer completeto
Reference
이 문제에 관하여(Criando um servidor REST com GO), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yanpiing/criando-um-servidor-rest-com-go-2f4k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)