zoukankan      html  css  js  c++  java
  • 使用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))
    }
  • 相关阅读:
    iOS 十六进制字符串 "#FFFF00" 转换成颜色对象
    iOS toast 的连续显示
    文件管理
    pod 常用命令
    键盘事件
    iOS 添加阴影
    渐变色
    Ubuntu安装flameshot截图工具
    Ubuntu安装酸酸乳客户端
    Ubuntu安装网易云音乐
  • 原文地址:https://www.cnblogs.com/zhangzihong/p/15073932.html
Copyright © 2011-2022 走看看