golang 创建 restful 服务

栏目: 编程工具 · 发布时间: 6年前

内容简介:有关 restful 可以参看创建工程,然后创建 main 文件,引用所需包。这里引用一个 Mux 的包用于创建路由
golang 创建 restful 服务

2_16x9_filtered.jpg.pagespeed.ce.zVPGFVmXTR.jpg

有关 restful 可以参看

会说话Restful

创建工程

创建工程,然后创建 main 文件,引用所需包。

package main

import (
    "encoding/json"
    "log"
    "net/http"
    "math/rand"
    "strconv"
    "github.com/gorilla/mux"
)

func main(){
    
}

设计路由

这里引用一个 Mux 的包用于创建路由

func main(){
    //Init Router
    r := mux.NewRouter()
    //Route Handlers / Endpoints
    r.HandleFunc("/api/tuts", getTuts).Methods("GET")
}
//Init Router
    r := mux.NewRouter()
    //Route Handlers / Endpoints
    r.HandleFunc("/api/tuts", getTuts).Methods("GET")
    r.HandleFunc("/api/tuts/{id}", getTut).Methods("GET")
    r.HandleFunc("/api/tuts", createTut).Methods("POST")
    r.HandleFunc("/api/tuts/{id}", updateTut).Methods("PUT")
    r.HandleFunc("/api/tuts/{id}", deleteTut).Methods("DELETE")

定义服务

log.Fatal(http.ListenAndServe(":4200",r))

定义数据模型结构

// tut struct (Model)
type Tut struct{
    ID string `json:"id"`
    Isbn string `json:"isbn"`
    Title string `json:"title"`
    Author *Author `json:"author"`
}

// Author Struct
type Author struct{
    Name string `json:"name"`
}

定义请求的处理句柄

func getTuts(w http.ResponseWriter, r *http.Request){

}
// get Single Tut
func getTut(w http.ResponseWriter, r *http.Request){
    
}
// create new Tut
func createTut(w http.ResponseWriter, r *http.Request){
    
}
//update tut
func updateTut(w http.ResponseWriter, r *http.Request){
    
}
//delete tut
func deleteTut(w http.ResponseWriter, r *http.Request){
    
}

模拟数据库

tuts = append(tuts, Tut{ID:"1",Isbn:"123",Title:"angular base tut",Author:&Author{
        Name:"zidea",
    }})

    tuts = append(tuts, Tut{ID:"2",Isbn:"345",Title:"vue base tut",Author:&Author{
        Name:"tina",
    }})

    tuts = append(tuts, Tut{ID:"3",Isbn:"456",Title:"react base tut",Author:&Author{
        Name:"zidea",
    }})

实现获取所有课程的列表

func getTuts(w http.ResponseWriter, r *http.Request){
    w.Header().Set("Content-Type","application/json")
    json.NewEncoder(w).Encode(tuts)
}

修改代码后我们需要重新 build 后再次启动服务。

然后可以 Postman 开测试一下我们的接口是否好用

golang 创建 restful 服务

屏幕快照 2019-04-06 上午6.54.32.png

golang 创建 restful 服务

屏幕快照 2019-04-06 上午6.54.26.png

实现单条查找

func getTut(w http.ResponseWriter, r *http.Request){
    w.Header().Set("Content-Type","application/json")
    params := mux.Vars(r) //Get params
    // loop through tuts and find with id
    for _, item := range tuts {
        if item.ID == params["id"]{
            json.NewEncoder(w).Encode(item)
            return 
        }
    }
    
    json.NewEncoder(w).Encode(&Tut{})
}
golang 创建 restful 服务

屏幕快照 2019-04-06 上午7.06.51.png

golang 创建 restful 服务

屏幕快照 2019-04-06 上午7.06.55.png

创建课程

func createTut(w http.ResponseWriter, r *http.Request){
    w.Header().Set("Content-Type","application/json")
    var tut Tut
    _ = json.NewDecoder(r.Body).Decode(&tut)
    tut.ID = strconv.Itoa(rand.Intn(1000)) // Mock Id
    tuts = append(tuts, tut)
    json.NewEncoder(w).Encode(tut)
}

测试接口

golang 创建 restful 服务

屏幕快照 2019-04-06 上午7.17.30.png

golang 创建 restful 服务

屏幕快照 2019-04-06 上午7.17.42.png

实现删除课程

func deleteTut(w http.ResponseWriter, r *http.Request){
    fmt.Println("call delete handler")
    w.Header().Set("Content-Type","application/json")
    params := mux.Vars(r)
    fmt.Println(params["id"])
    for index, item := range tuts{
        if item.ID == params["id"]{
            tuts = append(tuts[:index],tuts[index+1:]...)
            break
        }
    }

    json.NewEncoder(w).Encode(tuts)
}
golang 创建 restful 服务

屏幕快照 2019-04-06 上午7.40.10.png

更新课程

func updateTut(w http.ResponseWriter, r *http.Request){
    fmt.Println("call delete handler")
    w.Header().Set("Content-Type","application/json")
    params := mux.Vars(r)
    fmt.Println(params["id"])
    for index, item := range tuts{
        if item.ID == params["id"]{
            tuts = append(tuts[:index],tuts[index+1:]...)
            var tut Tut
            _ = json.NewDecoder(r.Body).Decode(&tut)
            tut.ID = params["id"] // Mock Id
            tuts = append(tuts, tut)
            json.NewEncoder(w).Encode(tut)
            return 
        }
    }

    json.NewEncoder(w).Encode(tuts)
}
golang 创建 restful 服务

屏幕快照 2019-04-06 上午7.40.48.png


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

七周七并发模型

七周七并发模型

Paul Butcher / 黄炎 / 人民邮电出版社 / 2015-3 / 49.00元

借助Java、Go等多种语言的特长,深度剖析所有主流并发编程模型 基于锁和线程的并发模型是目前最常用的一种并发模型,但是并发编程模型不仅仅只有这一种,本书几乎涵盖了目前所有的并发编程模型。了解和熟悉各种并发编程模型,在解决并发问题时会有更多思路。 ——方腾飞,并发编程网站长 当看到这本书的目录时,我就为之一振。它涉及了当今所有的主流并发编程模型(当然也包括Go语言及其实现的CSP......一起来看看 《七周七并发模型》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具