中文字幕av高清_国产视频一二区_男女羞羞羞视频午夜视频_成人精品一区_欧美色视_在线视频这里只有精品

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 一行代碼實現一個RESTful接口

一行代碼實現一個RESTful接口

來源:千鋒教育
發布人:syq
時間: 2022-09-23 11:24:00 1663903440

  背景

  基于現在微服務或者服務化的思想,我們大部分的業務邏輯處理函數都是長這樣的:

  比如grpc服務端:

1

  grpc客戶端:

2

  有些服務我們需要把它包裝為RESTful形式的接口,一般需要經歷以下步驟:

  指定HTTP方法、URL

  鑒權

  參數綁定

  處理請求

  處理響應

  可以發現,參數綁定、處理響應幾乎都是一樣模板代碼,鑒權也基本上是模板代碼(當然有些鑒權可能比較復雜)。

  而Ginrest庫就是為了消除這些模板代碼,它不是一個復雜的框架,只是一個簡單的庫,輔助處理這些重復的事情,為了實現這個能力使用了Go1.18的泛型。

  特性

  這個庫提供以下特性:

  封裝RESTful請求響應

  封裝RESTful請求為標準格式服務

  封裝標準格式服務處理結果為標準RESTful響應格式:Rsp{code, msg, data}

  默認使用統一數字錯誤碼格式:[0, 4XXXX, 5XXXX]

  默認使用標準錯誤格式:Error{code, msg}

  默認統一狀態碼[200, 400, 500]

  提供Recovery中間件,統一panic時的響應格式

  提供SetKey()、GetKey()方法,用于存儲請求上下文(泛型)

  提供ReqFunc(),用于設置Req(泛型)

  使用例子

  首先我們實現兩個簡單的服務:

3

  然后使用Gin+Ginrest包裝為RESTful接口:

  可以看到Register()里面每個接口都只需要一行代碼!

4

  運行上面代碼,然后嘗試訪問接口,可以看到返回結果:

5

  實現原理

  Do()和DoOpt()都會轉發到do(),它其實是一個模板函數,把臟活累活給處理了:

6

  功能列表

  處理請求

  用于把一個標準服務封裝為一個RESTfulgin.HandlerFunc,對應Do()、DoOpt()函數。

  DoOpt()相比于Do()多了一個opts參數,因為很多rpc框架客戶端都有一個opts參數作為結尾。

  還有一個BindJSON(),用于把請求體包裝為一個Req結構體:

7

  如果無法使用Do()和DoOpt()則可以使用此方法。

  處理響應

  用于把rsp、error、errcode、errmsg等數據封裝為一個JSON格式響應體,對應ProcessRsp()、Success()、Failure()、FailureCodeMsg()函數。

  比如ProcessRsp()需要帶上rsp和error,這樣業務里面就不需要再寫如下模板代碼了:

8

  響應格式統一為:

9

  Success()用于處理成功情況:

10

  其余同理。

  如果無法使用Do()和DoOpt()則可以使用這些方法。

  處理錯誤

  一般我們都需要在出錯時帶上一個業務錯誤碼,方便客戶端處理。因此我們需要提供一個合適的error類型:

11

  我們提供了一些函數方便使用Error,對應NewError()、ToError()、ErrCode()、ErrMsg()、ErrEqual()函數。

  比如NewError()生成一個Error類型error:

12

  請求上下文操作

  Gin的請求是鏈式處理的,也就是多個handler順序的處理一個請求,比如:

13

  這個接口經歷了Verify和ginrest.Do兩個handler,其中我們在Verify的時候通過認證知道了用戶的身份信息(比如uid),我們希望把這個uid存起來,這樣可以在業務邏輯里使用。

  因此我們提供了SetKey()、GetKey()兩個函數,用于存儲請求上下文:

  比如認證通過后我們可以設置UID到上下文,然后在reqFunc()里讀取設置到req里面(下面介紹)。

14

  請求結構體處理

  上面我們設置了請求上下文,比如UID,但是其實我們并不知道具體這個UID是需要設置到req里的哪個字段,因此我們提供了一個回調函數ReqFunc(),用于設置Req:

15

  

  如果這個庫的設計不符合具體的業務,也可以按照這種思路去封裝一個類似的庫,只要盡可能的統一請求、響應的格式,就可以減少很多重復的模板代碼。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
主站蜘蛛池模板: 国产精品久久 | 成人国产电影 | 久国久产久精永久网页 | 欧美怡红院视频一区二区三区 | 日韩1区 | 欧美一级在线播放 | 亚洲高清视频网站 | 欧洲亚洲精品久久久久 | 成人亚洲欧美 | 国产精品久久久久久久久久妞妞 | 成人免费视频网站在线观看 | 天堂免费在线观看视频 | 成人欧美一区二区三区在线播放 | 精品三区 | 欧美视频四区 | 中文字幕免费在线观看 | 久久精品一区二区 | 欧美一级做性受免费大片免费 | 中文字幕在线视频一区 | 日韩在线视频免费观看 | 黄色一级片视频播放 | 日本在线一区二区三区 | www.com欧美| 国产精品视频久久久 | 在线成人免费视频 | 国产精品一区二区三区四区 | 999在线观看精品免费不卡网站 | 麻豆精品一区二区 | 国产精品毛片无码 | 亚洲精品欧美视频 | 狠狠爱天天操 | 亚洲欧美一级 | 成人片在线播放 | 在线色网站 | 天天操狠狠操 | 黄色国产精品 | 最新中文字幕在线 | 精品久久久久久久久久久久久久 | 百性阁综合另类 | 久久99爱视频 | 精品在线一区二区 |