Apiware HTTP接口定义与请求参数绑定中间件 Apiware

xuanbao • 1337 次点击    
这是一个分享于 的项目,其中的信息可能已经有所发展或是发生改变。
Apiware 将 Go 语言 net/http 及 fasthttp 请求的指定参数绑定到结构体,并验证参数值的合法性。 建议您可以使用结构体作为 web 框架的 Handler,并用该中间件快速绑定请求参数,节省了大量参数类型转换与有效性验证的工作。同时还可以通过该结构体标签,创建 swagger 的 json 配置文件,轻松创建 api 文档服务。 **Demo 示例** <pre class="brush:cpp; toolbar: true; auto-links: false;">package main import ( &#34;encoding/json&#34; &#34;github.com/henrylee2cn/apiware&#34; // &#34;mime/multipart&#34; &#34;net/http&#34; &#34;strings&#34; ) type TestApiware struct { Id int `param:&#34;type(path),required,desc(ID),range(1:2)&#34;` Num float32 `param:&#34;type(query),name(n),range(1.1:1.19)&#34;` Title string `param:&#34;type(query),nonzero&#34;` Paragraph []string `param:&#34;type(query),name(p),len(1:10)&#34; regexp:&#34;(^[\\w]*$)&#34;` Cookie http.Cookie `param:&#34;type(cookie),name(apiwareid)&#34;` CookieString string `param:&#34;type(cookie),name(apiwareid)&#34;` // Picture multipart.FileHeader `param:&#34;type(formData),name(pic),maxmb(30)&#34;` } var myApiware = apiware.New(pathDecodeFunc, nil, nil) var pattern = &#34;/test/:id&#34; func pathDecodeFunc(urlPath, pattern string) apiware.KV { idx := map[int]string{} for k, v := range strings.Split(pattern, &#34;/&#34;) { if !strings.HasPrefix(v, &#34;:&#34;) { continue } idx[k] = v[1:] } pathParams := make(map[string]string, len(idx)) for k, v := range strings.Split(urlPath, &#34;/&#34;) { name, ok := idx[k] if !ok { continue } pathParams[name] = v } return apiware.Map(pathParams) } func testHandler(resp http.ResponseWriter, req *http.Request) { // set cookies http.SetCookie(resp, &amp;http.Cookie{ Name: &#34;apiwareid&#34;, Value: &#34;http_henrylee2cn&#34;, }) // bind params params := new(TestApiware) err := myApiware.Bind(params, req, pattern) b, _ := json.MarshalIndent(params, &#34;&#34;, &#34; &#34;) if err != nil { resp.WriteHeader(http.StatusBadRequest) resp.Write(append([]byte(err.Error()+&#34;\n&#34;), b...)) } else { resp.WriteHeader(http.StatusOK) resp.Write(b) } } func main() { // Check whether `testHandler` meet the requirements of apiware, and register it err := myApiware.Register(new(TestApiware)) if err != nil { panic(err) } // server http.HandleFunc(&#34;/test/0&#34;, testHandler) http.HandleFunc(&#34;/test/1&#34;, testHandler) http.HandleFunc(&#34;/test/1.1&#34;, testHandler) http.HandleFunc(&#34;/test/2&#34;, testHandler) http.HandleFunc(&#34;/test/3&#34;, testHandler) http.ListenAndServe(&#34;:8080&#34;, nil) }</pre> ** **
授权协议:
Apache
开发语言:
Google Go 查看源码»
操作系统:
跨平台
1337 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传