• 使用http 构建API接口


    package main
    
    import (
        "encoding/json"
        "fmt"
        "log"
        "net/http"
    
        "github.com/julienschmidt/httprouter"
    )
    
    func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
        fmt.Fprint(w, "Welcome!
    ")
    }
    
    type Book struct {
        ISDN   string `json:"isdn"`
        Title  string `json:"title"`
        Author string `json:"author"`
        Pages  int    `json:"pages"`
    }
    
    type JsonResponse struct {
        Meta interface{} `json:"metat"`
        Data interface{} `jsoin:"data"`
    }
    
    type JsonErrorResponse struct {
        Error *ApiError `json:"error"`
    }
    
    type ApiError struct {
        Status int16  `json:"status"`
        Title  string `json:"title"`
    }
    
    var bookstore = make(map[string]*Book, 0)
    
    func BookIndex(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
        books := []*Book{}
        for _, book := range bookstore {
            books = append(books, book)
        }
        response := &JsonResponse{Data: &books}
        w.Header().Set("Content-Type", "application/json; charset=UTF-8")
        w.WriteHeader(http.StatusOK)
        if err := json.NewEncoder(w).Encode(response); err != nil {
            panic(err)
        }
    }
    
    func BookShow(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
        isdn := params.ByName("isdn")
        book, ok := bookstore[isdn]
        w.Header().Set("Content-Type", "application/json; charset=UTF-8")
        if !ok {
            w.WriteHeader(http.StatusNotFound)
            response := JsonErrorResponse{Error: &ApiError{Status: 404, Title: "Record Not Found"}}
            if err := json.NewEncoder(w).Encode(response); err != nil {
                panic(err)
            }
    
        }
        response := JsonResponse{Data: book}
        if err := json.NewEncoder(w).Encode(response); err != nil {
            panic(err)
        }
    }
    
    func main() {
        router := httprouter.New()
        router.GET("/", Index)
        router.GET("/books", BookIndex)
        router.GET("/books/:isdn", BookShow)
    
        bookstore["123"] = &Book{
            ISDN:   "123",
            Title:  "Silence of the Lambs",
            Author: "Thomas Harris",
            Pages:  367,
        }
    
        bookstore["124"] = &Book{
            ISDN:   "124",
            Title:  "To Kill a Mocking Bird",
            Author: "Harper Lee",
            Pages:  320,
        }
    
        log.Fatal(http.ListenAndServe(":8081", router))
    }
  • 相关阅读:
    python中不可变数据类型和可变数据类型
    你分得清Python中:“索引和切片”吗?
    Python Django中一些少用却很实用的orm查询方法
    jQuery on()方法
    jquery.flexslider-min.js实现banner轮播图效果
    jQuery 树型菜单插件(Treeview)
    jQuery Growl 插件(消息提醒)
    jQuery Autocomplete 用户快速找到并从预设值列表中选择
    jQuery Accordion 插件用于创建折叠菜单
    jquery.validate.js 验证框架详解
  • 原文地址:https://www.cnblogs.com/zhangzihong/p/15073932.html
Copyright © 2020-2023  润新知