Grape 是一个现代的、零依赖的 Go HTTP 库。
它是标准库的一个薄包装,提供帮助函数以促进更快、更轻松的开发。仅向您的项目添加一个依赖项。
Go 标准库非常棒。它快速、易用,而且拥有出色的 API。
在 go 1.21 中增加了 log/slog,在 go 1.22 中改进了 HTTP 路由器,在大多数情况下,没有太多理由再去寻找更多。Grape 的目标不是破坏与 net/http 的兼容性,而是在处理程序触手可及的范围内添加常用函数。
特征
用法
主要的使用模式是将 Grape 嵌入结构体中,处理程序是结构体的一个方法,与模型、设置等其他字段相邻。
在这种方法中,不需要改变处理程序的参数来接受特定的上下文;所有的辅助方法都可以通过接收器使用。
package main
import ( "net/http"
"github.com/hossein1376/grape" )
type handler struct { // data/models // settings grape.Server }
func main() { h := handler{Server: grape.New()} // grape.Server inside a struct r := grape.NewRouter() // grape.Router for routing and starting the server
r.Use(h.LoggerMiddleware, h.RecoverMiddleware) r.Get("/{id}", h.paramHandler)
if err := r.Serve(":3000"); err != nil { h.Error("failed to start server", "error", err) return } }
func (h *handler) paramHandler(w http.ResponseWriter, r *http.Request) { h.Info("Param handler!")
id := h.ParamInt(r, "id") if id == 0 { h.NotFoundResponse(w) return }
h.OkResponse(w, grape.Map{"id": id}) }
|
提供日志记录、与 json 交互、常见 HTTP 响应和其他一些有用实用程序的方法。它可以嵌入到结构体中,作为常规字段放置,实例化为全局变量,甚至可以通过上下文传递。它的实例是通过运行创建的grape.New(),并且可以通过grape.Options 作为参数传递来自定义其行为。通过以 HTTP 动词命名的方法启用路由,并使用路由分组和特定于范围的中间件。通过运行创建一个新实例grape.NewRouter()。所有路由都在服务器启动时注册,其余路由由标准库处理,从而实现零运行时开销。提供广泛的数据验证功能。使用 启动一个新实例validator.New(),然后Check数据的每个部分都包含Case必要的数量。