服務計算作業 簡單 web 服務與客戶端開發實戰

2021-10-01 09:08:09 字數 3601 閱讀 6352

利用 web 客戶端呼叫遠端服務是服務開發本實驗的重要內容。其中,要點建立 api first 的開發理念,實現前後端分離,使得團隊協作變得更有效率。

作業要求

以下是本人承擔的工作.

在github建立本次作業的組織******-blog,建立三個倉庫:

邀請所有組員加入,並在自己的分支下分別進行開發,本地測試無bug後再發起marge request,由建立者marge。

參考:建立組織

/article"

,"articlearticleidget"

:"/openapi101/users//article/"

,"createcomment"

:"/openapi101/users//article//comment"

,"getcommentsofarticle"

:"/openapi101/users//article//comment"

,"authsigninpost"

:"/openapi101/auth/signin"

,"authsignuppost"

:"/openapi101/auth/signup"

}

具體api設計見專案文件中的api.yaml

github api v3 overview

網頁左邊是編輯器,右邊是實時響應的預覽介面。

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-nngbdt30-1575956421836)(

部分api如下:

/user//article/

:get

:summary

: get post

parameters:-

name

: username

in: path

required

:true

description

: user's name

type

: string

-name

: article_id

in: path

required

:true

description

: article id

type

: integer

responses

:200

:description

: a post

schema

:$ref

:'#/definitions/article'

404:

description

: not found

swagger的使用教程與yaml編寫api的學習參考:swagger gitbook

生成框架

go-server-server

go:

.swagger-codegen-ignore

main.go:專案入口,主檔案

專案通過main.go進入,收到請求時通過routers.go匹配api_default.go中對應的函式。既然框架已經搭好,我們就只需要關心邏輯實現了。

實現註冊

通過json反序列化http請求的body,得到username和password,判斷是否符合規則,不符合返回錯誤資訊,符合進行下一步;

查詢資料庫判斷有無重複使用者,有則返回錯誤資訊,無則進行下一步;

更新資料庫;

響應200.

實現登入

通過json反序列化http請求的body,得到username和password,判斷是否符合規則,不符合返回錯誤資訊,符合進行下一步;

查詢資料庫,判斷是否有該使用者,密碼是否正確;

返回jwt;

響應200.

關於boltdb資料庫的使用:

開啟資料庫:

db, err := bolt.

open

("my.db"

,0600

,nil

)

通過view進行唯讀事務,通過user桶查詢使用者:

err = db.

view

(func

(tx *bolt.tx)

error

}return

nil}

)

通過update進行寫操作,如果沒有user桶則先建立,然後使用put寫入使用者名稱和密碼的鍵值對。

需要注意的是所有寫入操作都需要寫入byte。

boltdb資料庫學習:golang boltdb的學習和實踐

關於jwt驗證

jwt(json web token)是一種驗證使用者身份的方式,一般使用方式為:使用者登入後,服務端發給客戶端乙個token,客戶端將其存放在cookie中,之後客戶端與服務端的互動都需要在請求的header中加上authorization引數,值即為該token。

這個token的組成為:

jwt頭:

​ 「alg」: 「hs256」,

​ 「typ」: 「jwt」

"alg"表示簽名演算法為hs256,"typ"表示token型別為jwt。

有效載荷:

​ iss:發行人

​ exp:到期時間

​ sub:主題

​ aud:使用者

​ nbf:在此之前不可用

​ iat:發布時間

​ jti:jwt id用於標識該jwt

除了這些預設可選字段之外也可以自己定義字段。

簽名:用來保證jwt的真實性。

jwt生成與分發:

token := jwt.

new(jwt.signingmethodhs256)

claims :=

make

(jwt.mapclaims)

claims[

"exp"

]= time.

now().

add(time.hour * time.

duration(1

)).unix()

claims[

"iat"

]= time.

now().

unix()

claims[

"sub"

]= user.username

token.claims = claims

tokenstring, err := token.

signedstring([

]byte

(user.username)

)if err !=

nil

go實戰–golang中使用jwt(json web token)

10分鐘了解json web令牌(jwt)

後端測試

後端使用postman或者postwoman傳送不同的請求來進行介面的測試。

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-khcplhjo-1575956421838)(

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-q49ouo55-1575956421838)(

服務計算作業二

在go語言裡也可以編寫基準測試,規則如下 1.基準測試的 檔案必須以 test.go 結尾 2.基準測試的函式必須以 benchmark 開頭,必須是可以匯出的 3.基準測試的函式必須接受乙個指向 benchmark 型別的指標作為唯一引數 4.基準測試函式不能有返回值 5.b.resettimer...

服務計算作業1 配置你的私有雲

實驗目的 實驗內容 實驗中遇到的問題 初步了解虛擬化技術,理解雲計算的相關概念 理解系統工程師面臨的困境 理解自動化安裝 管理 devops 在雲應用中的重要性 用vbox建立虛擬機器 備份mv etc yum.repos.d centos base.repo etc yum.repos.d cen...

服務計算作業5 模仿 改寫程式包

mycobra用於處理簡單的子命令系統 簡單的,不能帶很多引數的 其中有乙個命令樹,每個節點的子節點就是子命令,每個節點儲存自己的命令。type command struct設計 type command struct 就是一棵樹。addcommand函式 func c command addcom...