davisbento / quick

É um gerenciador de rotas minimalistico está nascendo e está em desenvolvimento, é para ser rápido e com alto desempenho 100% compatível com net/http.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

quick - Route Go

GoDoc Github Release CircleCI Go Report License CircleCI Coveralls

O quick é um gerenciador de rotas para Go, onde sua sintaxe foi inspirado no framework fiber.

É um gerenciador de rotas minimalistico está nascendo e está em desenvolvimento constante, é para ser rápido e com alto desempenho 100% compatível com net/http.

O objetivo é didático, e colaboração, todos são bem vindos a ajudar. 😍

O foco será o desempenho, otimizações e muito testes unitários.

Rodmap do desenvolvimento

  • [100%] Desenvolver MaxBodySize metodos Post e Put
  • [100%] Desenvolver Config em New(Config{}) não obrigatório
  • [70%] Desenvolve suporte a Grupo de Rotas - Group Get e Post
  • [30%] Desenvolver e relacionar ao Listen o Config
  • [100%] Criação de função print para não usar fmt de forma demasiada
  • [100%] Criação de função própria para Concat String
  • [100%] Criação de benchmarking entre os.Stdout e fmt.Println
  • [50%] Desenvolver Routes Método GET
  • [90%] Desenvolver Routes Método GET aceitando Query String
  • [90%] Desenvolver Routes Método GET aceitando Parametros
  • [90%] Desenvolver Routes Método GET aceitando Query String e Parametros
  • [0.%] Desenvolver Routes Método GET aceitando expressão regular
  • [80%] Desenvolver Routes Método POST
  • [90%] Desenvolver Routes Método POST aceitando JSON
  • [90%] Desenvolver para o MÉTODO POST o parse JSON
  • [90%] Desenvolver para o MÉTODO POST funções para acessar byte ou string do Parse
  • [80%] Desenvolver para o MÉTODO PUT
  • [90%] Desenvolver para o MÉTODO PUT o parse JSON
  • [90%] Desenvolver para o MÉTODO PUT o parse JSON
  • [90%] Desenvolver para o MÉTODO PUT funções para acessar byte ou string do Parse
  • [0.%] Desenvolver para o MÉTODO DELETE
  • [0.%] Desenvolver para o MÉTODO OPTIONS
  • [90%] Desenvolver método para ListenAndServe
  • [0.%] Desenvolver método para ListenAndServeTLS (http2)
  • [70%] Desenvolver método para Facilitar a manipulação do ResponseWriter
  • [70%] Desenvolver método para Facilitar a manipulação do Request
  • [70%] Desenvolver suporte a ServeHTTP
  • [10%] Desenvolver suporte a middlewares
  • [0.%] Desenvolve suporte Static Files
  • [0.%] Desenvolver suporte Cors

Contribuição

Jà temos um exemplo, e já podemmos testar e brincar 😁, é claro estamos no inicio ainda tem muito para fechar e fiquem a vontade em fazerem PR (com risco de ganhar uma camiseta Go ❤️ e é claro notoriedade para trabalhar com Go 😍 no mercado de trabalho)

Quick
package main

import "github.com/jeffotoni/quick"

func main() {
	app := quick.New()

	app.Get("/v1/user", func(c *quick.Ctx) {
		c.Set("Content-Type", "application/json")
		c.Status(200).SendString("Quick em ação ❤️!")
	})

	app.Listen("0.0.0.0:8080")
}
$ curl -i -XGET -H "Content-Type:application/json" \
'localhost:8080/v1/user'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Wed, 22 Feb 2023 07:45:36 GMT
Content-Length: 23

Quick em ação ❤️!% 
Quick Get Params
package main

import "github.com/jeffotoni/quick"

func main() {
	app := quick.New()

	app.Get("/v1/customer/:param1/:param2", func(c *quick.Ctx) {
		c.Set("Content-Type", "application/json")

		type my struct {
			Msg string `json:"msg"`
			Key string `json:"key"`
			Val string `json:"val"`
		}

		c.Status(200).Json(&my{
			Msg: "Quick ❤️",
			Key: c.Param("param1"),
			Val: c.Param("param2"),
		})
	})

	app.Listen("0.0.0.0:8080")
}
$ curl -i -XGET -H "Content-Type:application/json" \
'localhost:8080/v1/customer/val1/val2'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Wed, 22 Feb 2023 07:45:36 GMT
Content-Length: 23

{"msg":"Quick ❤️","key":"val1","val":"val2"}
Quick Post json
package main

import "github.com/jeffotoni/quick"

type My struct {
	Name string `json:"name"`
	Year int    `json:"year"`
}

func main() {
	app := quick.New()
	app.Post("/v1/user", func(c *quick.Ctx) {
		var my My
		err := c.Body(&my)
		if err != nil {
			c.Status(400).SendString(err.Error())
			return
		}
		c.Status(200).Json(&my)
	})

	app.Listen("0.0.0.0:8080")
}
$ curl -i -XPOST -H "Content-Type:application/json" \
'localhost:8080/v1/user' \
-d '{"name":"jeffotoni", "year":1990}'
HTTP/1.1 200 OK
Date: Wed, 22 Feb 2023 08:10:06 GMT
Content-Length: 32
Content-Type: text/plain; charset=utf-8

{"name":"jeffotoni","year":1990}
Cors
package main

import "github.com/jeffotoni/quick"
import "github.com/jeffotoni/quick/middleware/cors"

func main() {
	app := quick.New()
	app.Use(cors.New().Handler)

	app.Get("/v1/user", func(c *quick.Ctx) {
		c.Set("Content-Type", "application/json")
		c.Status(200).SendString("Quick em ação com Cors❤️!")
	})

	app.Listen("0.0.0.0:8080")
}
quick.Config{}
package main

import "github.com/jeffotoni/quick"

func main() {
	app := quick.New(quick.Config{
		MaxBodySize: 5 * 1024 * 1024,
	})

	app.Get("/v1/user", func(c *quick.Ctx) {
		c.Set("Content-Type", "application/json")
		c.Status(200).SendString("Quick em ação com Cors❤️!")
	})

	app.Listen("0.0.0.0:8080")
}
quick.Group()
package main

import "github.com/jeffotoni/quick"

func main() {
	app := quick.New(quick.Config{
		MaxBodySize: 5 * 1024 * 1024,
	})

	group := app.Group("/v1")
	group.Get("/user", func(c *quick.Ctx) {
		c.Status(200).SendString("[GET] [GROUP] /v1/user ok!!!")
		return
	})
	group.Post("/user", func(c *quick.Ctx) {
		c.Status(200).SendString("[POST] [GROUP] /v1/user ok!!!")
		return
	})

	app.Get("/v2/user", func(c *quick.Ctx) {
		c.Set("Content-Type", "application/json")
		c.Status(200).SendString("Quick em ação com [GET] /v2/user ❤️!")
	})

	app.Post("/v2/user", func(c *quick.Ctx) {
		c.Set("Content-Type", "application/json")
		c.Status(200).SendString("Quick em ação com [POST] /v2/user ❤️!")
	})

	app.Listen("0.0.0.0:8080")
}

About

É um gerenciador de rotas minimalistico está nascendo e está em desenvolvimento, é para ser rápido e com alto desempenho 100% compatível com net/http.

License:MIT License


Languages

Language:Go 98.7%Language:Makefile 1.3%