GoWeb開發_Iris框架講解(二):Get、Post、Put等請求及資料返回格式

qfDavie發表於2019-03-27

資料請求方式的分類

所有的專案中使用的請求都遵循HTTP協議標準,HTTP協議經過了1.0和1.1兩個版本的發展。

  • HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。

  • HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

因此,我們可以說,HTTP協議一共定義了八種方法用來對Request-URI網路資源的不同操作方式,這些操作具體為:GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECT等八種操作方式。

Iris框架的請求處理方式

  • 1、Iris框架中服務例項app中包含多個方法,用來支援對上述HTTP多種請求型別的直接處理,直接定義為get方法、post方法、put方法等,app中包含的自動處理路由請求的方法與http請求型別的分類一致。

  • 2、除了上述1中自動處理各類別的請求外,框架還支援使用通用的Handle方法來自定義編寫自己的請求處理型別及對應的方法。

兩種路由請求的處理方式示例如下:

app := iris.New()
​
//url: http://localhost:8000/getRequest
//type:GET請求
app.Get("/getRequest", func(context context.Context) {
        path := context.Path()
        app.Logger().Info(path)
})
​
//url: http://localhost:/user/info
//type:POST請求
app.Handle("POST", "/user/info", func(context context.Context) {
        context.WriteString(" User Info is Post Request , Deal is in handle func ")
})
​
//啟動埠監聽服務
app.Run(iris.Addr(":8000"))
​複製程式碼

GET請求

向特定的網路資源資料發起請求。GET請求可以攜帶請求資料,攜帶的請求資料會以?分割URL和傳輸資料,引數之間以&相連,比如http://localhost:3000?name=davie&pwd=123。 如下是一個http的get型別的請求:

http://localhost:8000/userpath複製程式碼

服務端的路由處理方式如下:

//url:http://localhost:8000/userpath
//type:GET請求、用GET方法處理
app.Get("/userpath", func(context context.Context) {
​
        //獲取Path
        path := context.Path()
        //日誌輸出
        app.Logger().Info(path)
        //寫入返回資料:string型別
        context.WriteString("請求路徑:" + path)
})複製程式碼

上述為使用已經封裝的預設的app.Get方式來處理請求,使用Handle方法來進行處理,如下所示:

//url:http://localhost:8000/hello
//type:GET請求、Handle方法第一個引數為GET,表明是GET請求方式
app.Handle("GET", "/hello", func(context context.Context) {
        context.HTML("<h1> Hello world. </h1>")
})複製程式碼

POST請求

POST請求在進行請求時會將請求資料放在請求body中進行請求,請求資料大小沒有限制。在開發過程中,我們使用postman工具來進行POST請求的除錯。 POST請求的示例如下所示:

http://localhost:8000/postLogin複製程式碼

服務端的路由處理方式如下:

//type:POST請求
//攜帶資料:name、pwd命名的請求資料
app.Post("/postLogin", func(context context.Context) {
        //獲取請求path
        path := context.Path()
        //日誌
        app.Logger().Info(path)
        //獲取請求資料欄位
        name := context.PostValue("name")
        pwd, err := context.PostValueInt("pwd")
        if err != nil {
            panic(err.Error())
        }
        app.Logger().Info(name, "  ", pwd)
        //返回
        context.HTML(name)
})複製程式碼

上述為使用預設路由請求方法Post方法來進行處理,同時,還可以使用Handle方法來進行處理,如下圖:

//url:http://localhost:8000/user/info
//type:POST請求,Handle方法第一個引數為POST,表明是Post請求
app.Handle("POST", "/user/info", func(context context.Context) {
        context.WriteString(" User Info is Post Request , Deal is in handle func ")
})複製程式碼

PUT、DELETE、OPTIONS、HEAD等其他型別請求

除了上述GET、POST最為常見的兩種請求方式以外,還有PUT、DELETE、OPTIONS、HEAD等其他型別請求,對於其他型別的請求,如同GET和POST請求一樣,都是可以通過兩種方式來進行處理:

  • 1、iris框架提供的自動識別請求型別的處理請求方法,如put方法、head方法、options方法、delete方法等

  • 2、使用通用的Handle方法對路由請求進行處理,開發者自己選擇具體的請求型別以、對應url和要進行處理的func。

如下是put和delete的請求處理: PUT請求

//type:PUT型別請求
app.Put("/putinfo", func(context context.Context) {
        path := context.Path()
        app.Logger().Info("請求url:", path)
})複製程式碼

DELETE請求

//type:DELETE型別請求  
app.Delete("/deleteuser", func(context context.Context) {
        path := context.Path()
        app.Logger().Info("Delete請求url:", path)
})複製程式碼

請求處理的資料格式返回

在本節課程中,我們已經學習瞭如何對不同型別的請求進行處理以及如何獲取請求所攜帶的資料,當後臺接收到請求後,將會對請求進行處理,處理完畢後將資料返回給請求的客戶端。接下來,我們看一看如何將資料進行返回,以及都有哪些形式。

在進行請求處理時,處理方法func有一個引數context。Context是用於處理請求的上下文環境變數,用於處理http請求及相關資料返回。iris框架支援多種資料格式的返回,此處我們學習掌握返回string、json、xml以及html格式的資料。

返回string型別資料

context.WriteString("hello world")複製程式碼

返回json格式的資料

context.JSON(iris.Map{"message": "hello word", "requestCode": 200})複製程式碼

返回xml格式的資料

context.XML(Person{Name: "Davie", Age: 18})複製程式碼

返回html格式資料

context.HTML("<h1> Davie, 12 </h1>")複製程式碼

通過本節課的內容,我們學習了iris框架中的不同型別的資料請求以及返回不同的資料格式。



相關文章