<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ApiwareHTTP接口定義與請求參數(shù)綁定中間件

          聯(lián)合創(chuàng)作 · 2023-09-19 20:16

          Apiware 將 Go 語言 net/http 及 fasthttp 請求的指定參數(shù)綁定到結(jié)構(gòu)體,并驗證參數(shù)值的合法性。 建議您可以使用結(jié)構(gòu)體作為 web 框架的 Handler,并用該中間件快速綁定請求參數(shù),節(jié)省了大量參數(shù)類型轉(zhuǎn)換與有效性驗證的工作。同時還可以通過該結(jié)構(gòu)體標(biāo)簽,創(chuàng)建 swagger 的 json 配置文件,輕松創(chuàng)建 api 文檔服務(wù)。

          Demo 示例

          package main
          
          import (
              "encoding/json"
              "github.com/henrylee2cn/apiware"
              // "mime/multipart"
              "net/http"
              "strings"
          )
          
          type TestApiware struct {
              Id           int         `param:"in(path),required,desc(ID),range(1:2)"`
              Num          float32     `param:"in(query),name(n),range(0.1:10.19)"`
              Title        string      `param:"in(query),nonzero"`
              Paragraph    []string    `param:"in(query),name(p),len(1:10)" regexp:"(^[\\w]*$)"`
              Cookie       http.Cookie `param:"in(cookie),name(apiwareid)"`
              CookieString string      `param:"in(cookie),name(apiwareid)"`
              // Picture   multipart.FileHeader `param:"in(formData),name(pic),maxmb(30)"`
          }
          
          var myApiware = apiware.New(pathDecodeFunc, nil, nil)
          
          var pattern = "/test/:id"
          
          func pathDecodeFunc(urlPath, pattern string) apiware.KV {
              idx := map[int]string{}
              for k, v := range strings.Split(pattern, "/") {
                  if !strings.HasPrefix(v, ":") {
                      continue
                  }
                  idx[k] = v[1:]
              }
              pathParams := make(map[string]string, len(idx))
              for k, v := range strings.Split(urlPath, "/") {
                  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, &http.Cookie{
                  Name:  "apiwareid",
                  Value: "http_henrylee2cn",
              })
          
              // bind params
              params := new(TestApiware)
              err := myApiware.Bind(params, req, pattern)
              b, _ := json.MarshalIndent(params, "", " ")
              if err != nil {
                  resp.WriteHeader(http.StatusBadRequest)
                  resp.Write(append([]byte(err.Error()+"\n"), 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("/test/0", testHandler)
              http.HandleFunc("/test/1", testHandler)
              http.HandleFunc("/test/1.1", testHandler)
              http.HandleFunc("/test/2", testHandler)
              http.HandleFunc("/test/3", testHandler)
              http.ListenAndServe(":8080", nil)
          }

           

           

           

           

          瀏覽 35
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国外黄A片免费看 | 日韩成人电影在线 | 一区在线视频播放 | a视频在线免费观看 | 日本免费网站 |