Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

usa001.o2oyc.com/jeffotoni/quick

Package Overview
Dependencies
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

usa001.o2oyc.com/jeffotoni/quick

Go Modules
Version
v0.0.0-20231201192105-72bb790cf81f
Version published
Created
Source

Logo do Quick

GoDoc Github Release CircleCI Go Report License CircleCI Coveralls

Quick Route Go Logo do Quick

🚀 O Quick é um gerenciador de rotas flexível e extensível para a linguagem Go. Seu objetivo é ser rápido e de alto desempenho, além de ser 100% compatível com net/http. O Quick é um projeto em constante desenvolvimento e está aberto para colaboração, todos são bem-vindos para contribuir. 😍

💡 Se você é novo na programação, o Quick é uma ótima oportunidade para começar a aprender a trabalhar com Go. Com sua facilidade de uso e recursos, você pode criar rotas personalizadas e expandir seu conhecimento na linguagem.

👍 Espero que possam participar e que gostem de Godar!!! 😍

🔍 O repositório de exemplos do Framework Quick Exemplos Quick.

🗺️| Rodmap do desenvolvimento

TarefaProgresso
Desenvolver MaxBodySize metodos Post e Put100%
Desenvolver Padrão de Testes Unitários90%
Desenvolver Config em New(Config{}) não obrigatório100%
Desenvolve suporte a Grupo de Rotas - Group Get e Post70%
Desenvolver e relacionar ao Listen o Config30%
Criação de função print para não usar fmt de forma demasiada100%
Criação de função própria para Concat String100%
Criação de benchmarking entre os.Stdout e fmt.Println100%
Desenvolver Routes Método GET100%
Desenvolver Routes Método GET aceitando Query String100%
Desenvolver Routes Método GET aceitando Parametros100%
Desenvolver Routes Método GET aceitando Query String e Parametros100%
Desenvolver Routes Método GET aceitando expressão regular100.%
Desenvolver Routes Método POST100%
Desenvolver Routes Método POST aceitando JSON100%
Desenvolver para o MÉTODO POST o parse JSON100%
Desenvolver para o MÉTODO POST funções para acessar byte ou string do Parse100%
Desenvolver para o MÉTODO PUT100%
Desenvolver para o MÉTODO PUT o parse JSON100%
Desenvolver para o MÉTODO PUT o parse JSON100%
Desenvolver para o MÉTODO PUT funções para acessar byte ou string do Parse100%
Desenvolver para o MÉTODO DELETE100%
Desenvolver para o MÉTODO OPTIONS0.%
Desenvolver para o MÉTODO CONNECT Veja mais0.%
Desenvolver método para ListenAndServe100%
Desenvolver método para ListenAndServeTLS (http2)0.%
Desenvolver método para Facilitar a manipulação do ResponseWriter80%
Desenvolver método para Facilitar a manipulação do Request80%
Desenvolver suporte a ServeHTTP100%
Desenvolver suporte a middlewares100%
Desenvolver suporte a middleware compress100%
Desenvolver suporte a middlewares cors100%
Desenvolver suporte a middlewares logger100%
Desenvolver suporte a middlewares maxbody100%
Desenvolver suporte a middlewares msgid100%
Desenvolver suporte a middlewares msguuid100%
Desenvolve suporte Static Files0.%
Desenvolver suporte Cors100.%
Desenvolver suporte Cient Get100.%
Desenvolver suporte Cient Post100.%
Desenvolver suporte Cient Put100.%
Desenvolver suporte Cient Delete100.%
Desenvolver suporte Cient Fast Get90.%
Desenvolver suporte Cient Fast Post80.%
Desenvolver suporte Cient Fast Put80.%
Desenvolver suporte Cient Fast Delete80.%

Primeiro exemplo Quick


package main

import "github.com/jeffotoni/quick"

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

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

    q.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() {
    q := quick.New()

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

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

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

    q.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 Body json


package main

import "github.com/jeffotoni/quick"

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

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

        return c.Status(200).String(c.BodyString())
        // ou 
        // c.Status(200).JSON(&my)
    })

    q.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}

🎛️| Funcionalidades

FuncionalidadesPossui
🛣️ Gerenciador de Rotassim
📁 Server Files Staticsim
🚪 Grupo de Rotassim
🌐 Middlewaressim
🚀 HTTP/2 supportsim
🧬 Data binding for JSON, XML and form payloadsim
🔍 Suporte para regexsim

📚| Examples

Este repositório contém exemplos práticos do Framework Quick, um framework web rápido e leve, desenvolvido em Go. Os exemplos estão organizados em pastas separadas, cada uma contendo um exemplo completo de uso do framework em uma aplicação web simples. Se você tem algum exemplo interessante de uso do Framework Quick, sinta-se à vontade para enviar uma solicitação de pull request com sua contribuição. O repositório de exemplos do Framework Quick pode ser encontrado em aqui.

Quick Post Bind json


package main

import "github.com/jeffotoni/quick"

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

func main() {
    q := quick.New()
    q.Post("/v2/user", func(c *quick.Ctx) error {
        var my My
        err := c.Bind(&my)
        if err != nil {
            return c.Status(400).SendString(err.Error())
        }
        return c.Status(200).JSON(&my)
    })

    q.Listen("0.0.0.0:8080")
}


$ curl -i -XPOST -H "Content-Type:application/json" \
'localhost:8080/v2/user' \
-d '{"name":"Marcos", "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":"Marcos","year":1990}

Cors


package main

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

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

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

    q.Listen("0.0.0.0:8080")
}

quick.New(quick.Config{})


package main

import "github.com/jeffotoni/quick"

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

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

    q.Listen("0.0.0.0:8080")
}

quick.Group()

package main

import "github.com/jeffotoni/quick"

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

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

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

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

    q.Listen("0.0.0.0:8080")
}

Quick Tests


package main

import (
    "io"
    "strings"
    "testing"

    "github.com/jeffotoni/quick"
)

func TestQuickExample(t *testing.T) {

    // Here is a handler function Mock
    testSuccessMockHandler := func(c *quick.Ctx) error {
        c.Set("Content-Type", "application/json")
        b, _ := io.ReadAll(c.Request.Body)
        resp := `"data":` + string(b)
        return c.Byte([]byte(resp))
    }

    q := quick.New()
    // Here you can create all routes that you want to test
    q.Post("/v1/user", testSuccessMockHandler)
    q.Post("/v1/user/:p1", testSuccessMockHandler)

    wantOutData := `"data":{"name":"jeff", "age":35}`
    reqBody := []byte(`{"name":"jeff", "age":35}`)
    reqHeaders := map[string]string{"Content-Type": "application/json"}

    data, err := q.QuickTest("POST", "/v1/user", reqHeaders, reqBody)
    if err != nil {
        t.Errorf("error: %v", err)
        return
    }

    s := strings.TrimSpace(data.BodyStr())
    if s != wantOutData {
        t.Errorf("was suppose to return %s and %s come", wantOutData, s)
        return
    }

    t.Logf("\nOutputBodyString -> %v", data.BodyStr())
    t.Logf("\nStatusCode -> %d", data.StatusCode())
    t.Logf("\nOutputBody -> %v", string(data.Body())) // I have converted in this example to string but comes []byte as default
    t.Logf("\nResponse -> %v", data.Response())
}

quick.regex


package main

import (
    "github.com/jeffotoni/quick"
    "github.com/jeffotoni/quick/middleware/msgid"
)

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

    q.Use(msgid.New())

    q.Get("/v1/user/{id:[0-9]+}", func(c *quick.Ctx) error {
        c.Set("Content-Type", "application/json")
        return c.Status(200).String("Quick ação total!!!")
    })

    q.Listen("0.0.0.0:8080")
}

🤝| Contribuições

Já temos diversos exemplos, e já podemos testar e brincar 😁. É claro, estamos no início, ainda tem muito para fazer. Fiquem à vontade em fazer PR (com risco de ganhar uma camiseta Go ❤️ e claro reconhecimento como profissional Go 😍 no mercado de trabalho).

🚀 Apoiadores do Projeto Quick 🙏

O Projeto Quick visa desenvolver e disponibilizar softwares de qualidade para a comunidade de desenvolvedores. 💻 Para continuarmos a melhorar nossas ferramentas, contamos com o apoio de nossos patrocinadores no Patreon. 🤝

Agradecemos a todos os nossos apoiadores! 🙌 Se você também acredita em nosso trabalho e quer contribuir para o avanço da comunidade de desenvolvimento, considere apoiar o Projeto Quick em nosso Patreon aqui

Juntos podemos continuar a construir ferramentas incríveis! 🚀

AvatarUserDonation
@jeffotonix 10
@Crow3442x 5
@Guilherme-De-Marchix 5

FAQs

Package last updated on 01 Dec 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts