GopherLIght
Olá pessoal, primeiro gostaria de agradecer por escolherem usar nosso projeto. Mesmo sendo pequeno, fizemos isso com muito entusiasmo! Para começar a usá-lo você primeiro precisa instalá-lo, vamos supor que você já o tenha. Em seguida instale os módulos principais do framework, que são req e roteador
go get github.com/BrunoCiccarino/GopherLight/router go get github.com/BrunoCiccarino/GopherLight/req
Já baixou? Ufa! Agora podemos fazer nosso primeiro hello world.
package main import ( "fmt" "github.com/BrunoCiccarino/GopherLight/router" "github.com/BrunoCiccarino/GopherLight/req" ) func main() { app := router.NewApp() // Define a route that responds to a GET request at "/hello". app.Get("/hello", func(r *req.Request, w *req.Response) { w.Send("Hello, World!") }) fmt.Println("Server listening on port 3333") app.Listen(":3333") }
Muito simples, certo? E podemos fazer muito mais com GopherLight. Continue lendo para obter uma análise completa dos métodos HTTP e de nossas ferramentas de solicitação e resposta.
Métodos HTTP suportados
Aqui está a lista de métodos HTTP que você pode usar com router.App. Cada um deles permite configurar rotas para lidar com diferentes tipos de solicitações. Vamos mergulhar!
Recupera dados sem modificar nada.
Exemplo: buscando uma lista de itens ou lendo detalhes do usuário.
Envia dados para criar um novo recurso.
Exemplo: Enviando um formulário ou adicionando um novo item a uma lista.
Uso: app.Put(caminho, manipulador)
Atualiza ou substitui um recurso. É uma ação de “substituir”.
Exemplo: Atualizando um perfil de usuário completo.
Uso: app.Delete(caminho, manipulador)
Exclui um recurso.
Exemplo: Removendo um usuário ou excluindo uma postagem.
Uso: app.Patch(caminho, manipulador)
Atualiza parcialmente um recurso sem substituir tudo.
Exemplo: Atualizando apenas o e-mail em um perfil de usuário.
Uso: app.Options(caminho, manipulador)
Retorna métodos HTTP permitidos para um URL, principalmente para solicitações de simulação de CORS.
Uso: app.Head(caminho, manipulador)
Como GET, mas sem corpo de resposta. Use-o para verificar se existe um recurso.
Uso: app.Connect(caminho, manipulador), app.Trace(caminho, manipulador)
Métodos avançados: CONNECT configura um túnel (para SSL) e TRACE é para depuração, ecoando a solicitação.
Agora que você viu as rotas, vamos falar sobre os objetos Request e Response, seus ajudantes essenciais para lidar com solicitações recebidas e enviar respostas.
Cada manipulador de solicitação recebe um objeto Request carregado com informações sobre a solicitação recebida. Aqui está o que você pode fazer com isso:
app.Get("/greet", func(r *req.Request, w *req.Response) { name := r.QueryParam("name") if name == "" { name = "stranger" } w.Send("Hello, " name "!") })
O objeto Response ajuda você a enviar uma resposta de volta ao cliente. Aqui está o que você pode fazer:
app.Get("/user", func(r *req.Request, w *req.Response) { user := map[string]string{"name": "Gopher", "language": "Go"} w.JSON(user) })
Temos um lote de middlewares prontos para você adicionar algumas funcionalidades importantes ao seu aplicativo da web Go. Cada um desses middlewares traz sua própria magia: segurança, registro, tempos limite e muito mais! Vamos dividi-los um por um. ?
Nosso AuthMiddleware ajuda a proteger suas rotas com JSON Web Tokens (JWT). É flexível, permitindo personalizar a chave secreta, o tratamento de erros e o método de extração de token.
Configurar
Para começar, defina suas configurações de JWT usando JWTConfig:
import ( "github.com/BrunoCiccarino/GopherLight/middleware" ) config := middleware.JWTConfig{ SecretKey: []byte("your_secret_key"), } app.Use(middleware.NewAuthMiddleware(config))
Precisa permitir solicitações de origem cruzada? Sem problemas! Nosso CORSMiddleware define as configurações de Cross-Origin Resource Sharing (CORS) para tornar sua API acessível de outros domínios.
Opções de configuração
corsOptions := middleware.CORSOptions{ AllowOrigin: "*", AllowMethods: []string{"GET", "POST"}, } app.Use(middleware.CORSMiddleware(corsOptions))
Nosso CSRFMiddleware protege contra falsificação de solicitação entre sites, validando um token CSRF enviado com cada solicitação. Use GenerateCSRFToken() para criar um token seguro e, em seguida, valide-o com sua própria função isValidToken.
app.Use(middleware.CSRFMiddleware(func(token string) bool { return token == "your_valid_token" }))
E não se esqueça de gerar tokens com:
csrfToken := middleware.GenerateCSRFToken()
Quer acompanhar o que está acontecendo no seu servidor? LoggingMiddleware registra cada solicitação, incluindo o método, caminho e tempo gasto. É uma ótima maneira de se manter informado sobre o desempenho do aplicativo e qualquer atividade incomum.
app.Use(middleware.LoggingMiddleware)
Cada solicitação será registrada assim:
Evite essas esperas intermináveis definindo limites de tempo no processamento de solicitações com TimeoutMiddleware. Este middleware cancelará a solicitação se ela não for concluída a tempo, enviando um status 504 Gateway Timeout para o cliente.
import ( "time" "github.com/BrunoCiccarino/GopherLight/middleware" ) timeout := 2 * time.Second app.Use(middleware.TimeoutMiddleware(timeout))
A interface do plugin é super simples, mas super poderosa. Oferece um único método: registrar-se. Isso permite que você se conecte ao sistema de roteamento do aplicativo para adicionar as rotas necessárias, seja um novo endpoint de API, um webhook ou qualquer outra coisa que você possa imaginar.
O método de registro
Aqui está a parte mágica da interface do plugin:
type Plugin interface { Register(route func(method, path string, handler func(req *req.Request, res *req.Response))) }
O método Register aceita uma função de rota que permite definir novas rotas em seu plugin especificando:
Digamos que você queira criar um plugin que adicione um endpoint simples em /hello-plugin para cumprimentar os usuários. Esta seria a aparência do plugin:
package main import ( "github.com/BrunoCiccarino/GopherLight/plugins" "github.com/BrunoCiccarino/GopherLight/req" ) type HelloPlugin struct{} // Register adds a new route for the HelloPlugin. func (p *HelloPlugin) Register(route func(method, path string, handler func(req *req.Request, res *req.Response))) { route("GET", "/hello-plugin", func(req *req.Request, res *req.Response) { res.Send("Hello from the HelloPlugin!") }) }
Para carregar um plugin, basta criar uma instância e chamar Register na configuração principal do seu aplicativo:
package main import ( "github.com/BrunoCiccarino/GopherLight/router" ) func main() { app := router.NewApp() helloPlugin := &HelloPlugin{} helloPlugin.Register(app.Route) app.Listen(":3333") }
Cada plugin pode adicionar quantas rotas forem necessárias. Basta chamar route várias vezes em sua função Register para definir pontos de extremidade adicionais. Use diferentes métodos, caminhos e manipuladores HTTP para moldar a funcionalidade do seu plug-in da maneira que desejar.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3