99久久久精品免费观看国产,紧身短裙女教师波多野,正在播放暮町ゆう子在线观看,欧美激情综合色综合啪啪五月

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

手機站
千鋒教育

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

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

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

當前位置:首頁  >  技術干貨  > 一行代碼實現一個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
主站蜘蛛池模板: 亚洲永久精品ww47| 十六以下岁女子毛片免费| 2023av在线播放| 成年在线观看免费人视频草莓 | 国产视频高清| 欧美卡一卡2卡三卡4卡在线| 波多野吉衣在线电影| 三上悠亚伦理| 啊…别了在线观看免费下载| 一本到不卡| 日本特黄特黄刺激大片| 日本免费久久| 天天谢天天干| 男男车车的车车网站免费| 一个人看的www视频免费在线观看| 波多野结大战三个黑鬼 | 欧美日韩一区二区在线| 日韩毛片| 日韩欧美在线视频| 国产一精品一av一免费爽爽| 精品三级内地国产在线观看| 最好看的最新中文字幕2018免费视频| 国产换爱交换乱理伦片| 无套国产| 黑人猛男大战俄罗斯白妞| 久久麻豆视频| 中文毛片无遮挡高清免费| 大狠狠大臿蕉香蕉大视频| 日本三级吃奶乳视频在线播放| 欧美猛交xxxx免费看| 亚洲欧洲日产国产最新| 特级做a爰片毛片免费看| 丰满的寡妇3在线观看| 极品丝袜乱系列全集| 试看120秒做受小视频免费| 欧美三级电影免费| 么公的又大又深又硬想要| 亚洲小视频在线观看| 男人桶女人羞羞漫画全集| 嗯啊啊啊视频| 九九九精品视频免费|