package
0.0.0-20240707130328-7cf8dae7750a
Repository: https://github.com/nite-coder/blackbear.git
Documentation: pkg.go.dev

# README

Web

Examples

hello world

package main

import (
	"github.com/nite-coder/blackbear/pkg/web"
)

func main() {
	s := web.NewServer()

	s.Get("/", func(c *web.Context) error {
		return c.String(200, "Hello World")
	})

	s.Run(":10080")
}

Using GET, POST, PUT, PATCH, DELETE and OPTIONS

package main

import (
	"github.com/nite-coder/blackbear/pkg/web"
)

func main() {
	s := web.NewServer()

	s.Get("/my-get", myHeadEndpoint)
	s.Post("/my-post", myPostEndpoint)
	s.Put("/my-put", myPutEndpoint)
	s.Delete("/my-delete", myDeleteEndpoint)
	s.Patch("/my-patch", myPatchEndpoint)
	s.Options("/my-options", myOptionsEndpoint)
	s.Head("/my-head", myHeadEndpoint)

    s.Run(":10080")
}

Parameters in path

package main

import (
	"github.com/nite-coder/blackbear/pkg/web"
)

func main() {
	s := web.NewServer()

	s.Get("/users/:name", func(c *web.Context) error {
		name := c.Param("name")
		return c.String(200, "Hello, "+name)
	})

	// /videos/sports/basketball/1.mp4
	// /videos/2.mp4
	// both path will route to the endpoint
	s.Get("/videos/*video_id", func(c *web.Context) error {
		id := c.Param("video_id")
		return c.String(200, "video id is, "+id)
	})

	s.Run(":10080")
}

Get querystring value

package main

import (
	"github.com/nite-coder/blackbear/pkg/web"
)

func main() {
	s := web.NewServer()

	// http://localhost:10080/test?page=3
	s.Get("/test", func(c *web.Context) error {
		page := c.Query("page") //get query string value
		return c.String(200, page)
	})

	err := s.Run(":10080")
	if err != nil {
		panic(err)
	}
}

Get post form value (Multipart/Urlencoded Form)

package main

import (
	"github.com/jasonsoft/napnap"
)

func main() {
	nap := napnap.New()

	nap.Post("/post-form-value", func(c *napnap.Context) error {
		userId := c.Form("user_id") //get post form value
		return c.String(200, userId)
	})

	http.ListenAndServe("127.0.0.1:10080", nap)
}

JSON binding

package main

import "github.com/jasonsoft/napnap"

func main() {
	nap := napnap.New()

	nap.Post("/json-binding", func(c *napnap.Context) error {
		var person struct {
			Name string `json: name`
			Age  int    `json: age`
		}
        err := c.BindJSON(&person)
        if err != nil {
            return err
        }
		c.String(200, person.Name)
        return nil
	})

	http.ListenAndServe("127.0.0.1:10080", nap)
}

JSON rendering

package main

import "github.com/jasonsoft/napnap"

func main() {
	nap := napnap.New()

	nap.Get("/json-rendering", func(c *napnap.Context) error {
		var person struct {
			Name string `json: name`
			Age  int    `json: age`
		}

		person.Name = "napnap"
		person.Age = 18

		return c.JSON(200, person)
	})

	http.ListenAndServe("127.0.0.1:10080", nap) 
}

Http/2 Server

package main

import "github.com/jasonsoft/napnap"

func main() {
	router := napnap.NewRouter()

	router.Get("/hello-world", func(c *napnap.Context) {
		c.String(200, "Hello, World")
	})

	nap := napnap.New()
	nap.Use(router)
	nap.RunTLS(":443", "cert.crt", "key.pem") // nap will use http/2 server as default
}

combine with autocert

Let's Encrypt disable tls challenge, so we can only use http challenge with autocert(dns challenge not implemented)

notes:

we need to bind http service on 80 port, https service on 443 port. First time, you need to wait a short time for creating and downloading certificate .

package main

import "github.com/jasonsoft/napnap"

func main() {
	router := napnap.NewRouter()

	projRoot, err := filepath.Abs(filepath.Dir(os.Args[0]))
	if err != nil {
		log.Fatal(err.Error())
	}

	config := napnap.Config{
		Domain:        "exmaple.com", // multi domain support ex. "abc.com, 123.com"
		CertCachePath: path.Join(projRoot, ".certCache"),
	}
	server := napnap.NewHttpEngineWithConfig(&config)

	nap := napnap.New()
	nap.Use(router)

	nap.RunAutoTLS(server)
}

# Packages

No description provided by the author

# Functions

FromContext return a web context from the standard context.
NewServer returns a new WebServer instance.
WrapHandler wraps `http.Handler` into `web.HandlerFunc`.

# Constants

CONNECT HTTP method.
DELETE HTTP method.
GET HTTP method.
HEAD HTTP method.
OPTIONS HTTP method.
PATCH HTTP method.
POST
POST HTTP method.
PUT HTTP method.
TRACE HTTP method.

# Structs

Context represents the context of the current HTTP request.
Param is a single URL parameter, consisting of a key and a value.
No description provided by the author
WebServer is root level of framework instance.

# Interfaces

MiddlewareHandler is an interface that objects can implement to be registered to serve as middleware in the WebServer middleware stack.
ResponseWriter wraps the original http.ResponseWriter.

# Type aliases

ErrorHandler defines a function to handle HTTP errors.
HandlerFunc defines a function to server HTTP requests.
MiddlewareFunc is an adapter to allow the use of ordinary functions as WebServer handlers.