美文网首页
Go语言-一个简单的MockServer实现

Go语言-一个简单的MockServer实现

作者: Robbit | 来源:发表于2018-06-27 16:04 被阅读0次

目的

用于在开发阶段,服务端接口没有正式完成之前,模拟接口请求,便于客户端测试。

实现

建立一个文件夹(Config),放置所有的接口文件

编写接口文件

将接口按如下json格式存储到成文件,一个接口对应一个文件
如登录接口:./Config/login.json

path: 接口路径
desc: 接口描述
response:响应数据

{
  "path": "/login",
  "desc": "login api",
  "response":"{\"code\":0,\"message\":\"success\"}"
}

代码

定义接口

type API struct{
    Path string `json:"path"`
    Desc string `json:"desc"`
    Response string `json:"response"`
}

读取所有的接口配置文件

var apis []API
func loadConfig(path string)  {
    /* 读取目录下所有的json文件,解析成API数组,存放到apis中 */
    files, err := ioutil.ReadDir(path)
    if err != nil {
        log.Fatal(err)
    }
    for _, file := range files {
        if strings.HasSuffix(file.Name(), "json") {

            f, err := os.OpenFile(path + file.Name(), os.O_RDONLY, 0755)
            defer f.Close()

            if err != nil {
                log.Fatal("read config error : ", err.Error())
            }

            data := make([]byte, 1000)
            n, err := f.Read(data)
            if err != nil {
                log.Fatal(err)
            }

            fmt.Printf(string(data[:n]))

            var api API
            err = json.Unmarshal(data[:n], &api)

            if err != nil {
                log.Fatal(err)
            }

            apis = append(apis, api)
        }
    }
}

开启HTTP服务


func findAPIForPath(path string) API {
    for _, api := range apis {
        //todo: 换成正则表达式匹配
        if strings.Compare(api.Path, path) == 0 {
            return api
        }
    }
    return API{Response:"Not found"}
}
func handleHttpRequest(w http.ResponseWriter, req * http.Request)  {
    fmt.Println("receive request : " + req.URL.Path);

    api := findAPIForPath(req.URL.Path)

    //todo: 参数校验,HTTP Header校验, response Header设置
    w.Write([]byte(api.Response))

}


func main() {
    fmt.Printf("Start mock...\n")

    apis = make([]API, 0)

    loadConfig("./Config/")

    http.HandleFunc("/",handleHttpRequest)
    http.ListenAndServe(":8001", nil)

}

运行

go run ./main.go

相关文章

网友评论

      本文标题:Go语言-一个简单的MockServer实现

      本文链接:https://www.haomeiwen.com/subject/agabyftx.html