GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - issue9/web: 通用的 web 框架

BranchesTags
Open more actions menu

Latest commit

 

History

2,852 Commits
2,852 Commits

Folders and files

NameName
Last commit message
Last commit date
.github/workflows
.github/workflows
 
 
comptime
comptime
 
 
filter
filter
 
 
internal
internal
 
 
locales
locales
 
 
mimetype
mimetype
 
 
openapi
openapi
 
 
problems
problems
 
 
selector
selector
 
 
server
server
 
 
startuptest
startuptest
 
 
.editorconfig
.editorconfig
 
 
.gitignore
.gitignore
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
bench_test.go
bench_test.go
 
 
client.go
client.go
 
 
client_test.go
client_test.go
 
 
codec.go
codec.go
 
 
codec_test.go
codec_test.go
 
 
compressor.go
compressor.go
 
 
compressor_test.go
compressor_test.go
 
 
context.go
context.go
 
 
context_test.go
context_test.go
 
 
generate_compressors.go
generate_compressors.go
 
 
generated_compressors.go
generated_compressors.go
 
 
go.mod
go.mod
 
 
go.sum
go.sum
 
 
input.go
input.go
 
 
input_test.go
input_test.go
 
 
locale.go
locale.go
 
 
locale_test.go
locale_test.go
 
 
output.go
output.go
 
 
output_test.go
output_test.go
 
 
problem.go
problem.go
 
 
problem_test.go
problem_test.go
 
 
router.go
router.go
 
 
router_test.go
router_test.go
 
 
server.go
server.go
 
 
server_test.go
server_test.go
 
 
service.go
service.go
 
 
service_test.go
service_test.go
 
 
startup.go
startup.go
 
 
web.go
web.go
 
 

Repository files navigation

web

Test codecov PkgGoDev Go version License

web 是一个比较完整的 API 开发框架,相对于简单的路由,提供了更多的便利功能。 如果你只是需要一个简单的路由工具,那么你可以移步到 mux。

package main

import "github.com/issue9/web"
import "github.com/issue9/web/server"

// main.go
func main() {
    srv, err := server.New("web", "1.0.0", &server.Options{})
    router := srv.Routers().New()
    router.Get("/admins", getAdmins).
        Get("/groups", getGroups)

    srv.Serve()
}

func getAdmins(ctx* web.Context) web.Responser {
    return ctx.NotImplemented()
}

func getGroups(ctx* web.Context) web.Responser {
    return ctx.NotImplemented()
}

字符集和文档类型

https://www.iana.org/assignments/character-sets/character-sets.xhtml 中列出的字符集都能自动转换。 文档类型由 Server.Mimetypes 指定。

package main

import (
	"github.com/issue9/web"
	"github.com/issue9/web/server"
	"github.com/issue9/web/mimetype/json"
	"github.com/issue9/web/mimetype/xml"
)

srv := server.New("app", "1.0.0", &server.Options{
	Codec: web.NewCodec().
		AddMimetype(xml.Mimetype, json.Marshal, json.Unmarshal, xml.ProblemMimetype, true, true).
		AddMimetype(xml.Mimetype, xml.Marshal, xml.Unmarshal, xml.ProblemMimetype, true, true)
	}
})

srv.Serve()

客户端只要在请求时设置 Accept 报头就可返回相应类型的数据,而 Accept-Charset 报头可设置接收的字符集。 Content-Type 则可以有向服务器指定提交内容的文档类型和字符集。

错误处理

框架根据 RFC7807 提供了一种输出错误信息内容的机制。

在处理出错时,调用 Context.Problem 即可:

func getAdmins(ctx* web.Context) web.Responser {
	return ctx.Problem(web.ProblemBadRequest).WithParam("param", "invalid format")
}

openapi

可直接在添加 API 的中间件上指定文档内容:

srv := server.New("app", "1.0.0", ...)
router := s.Routers().New(...)
doc := openapi.New(srv, web.Phrase("title")) // 声明文档对象

router.Get("/admins", getAdmins, doc.API(func(o* openapi.Operation){
	o.Desc(web.Phrase("desc of api")). // 接口的描述
		Body(). // 请求内容
		Response() // 指定返回内容
}))

router.Get("/openapi", doc.Handler()) // 将文档以接口的形式输出

插件

  • https://github.com/issue9/webuse 提供了中间件、插件、过滤器等常用的功能。

版权

本项目采用 MIT 开源授权许可证,完整的授权说明可在 LICENSE 文件中找到。

About

通用的 web 框架

pkg.go.dev/github.com/issue9/web

Topics

apiapi-frameworkapi-serverframeworkframework-gogogolangserverwebweb-framework

Resources

Readme
MIT license
Activity
Custom properties

Stars

6 stars

Watchers

2 watching

Forks

1 fork
Report repository

Releases

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.