首先執行 consul
下載 consul
以開發模式執行
consul agent -dev
2. 除錯
- 用 Visual Studio 2022 IDE 開啟專案;
- 右擊解決方案-選擇“屬性”
- 在屬性介面下,選擇多專案啟動, News.Server, Auth.Server, Register.Server, ApiGateway 幾個專案的操作方式選擇為“啟動”;
如下圖
3. 部署
- 用 Visual Studio 2022 IDE 開啟專案;
- 右擊 News.Server 專案,選擇“釋出”(Auth.Server,Register.Server,ApiGateway 同理)
- 選擇釋出的資料夾;
- 用命令提示符進入資料夾,啟動專案
dotnet News.Server.dll
如下圖
apigateway & server
service service detial
4. postman 呼叫
呼叫方不需要知道微服務部署的地址,直接訪問閘道器就可以了。
開啟閘道器的服務列表可以看到所有服務的呼叫路徑,在展開服務的明細可看到更多關於該服務的資訊,如授權、角色限制等。
直接複製上面所示的呼叫地址,下面用 postman 對 api 進行呼叫:
4.1 Register
4.1.1 判斷使用者名稱 grissom 是否可用
- 使用 GET 方法請求;
- Content-Type 設定為 application/json;
4.1.2 註冊會員 grissom
請求路徑: http://localhost:5000/api/v1/register/register?name=grissom&nickname=Gil&pwd=123
4.2 Auth
4.2.1 獲取 token
上面註冊會員都是匿名訪問的,但訪問受保護的 api 必須先獲取 token 請求 token api 需要:
- 使用 Post 方法請求;
- Content-Type 設定為 application/json;
- Body 用 json 格式, 如 {"username":"grissom","password":"123"};
返回結果是一個 json 格式的物件, access_token 就是生成的 token, expired_in (數字時間戳從 1970 到現在的秒數)是 token 的失效時間
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MzIzNjUzNzUsInVzZXJuYW1lIjoiZ3Jpc3NvbSIsInJvbGVzIjoiYWRtaW4iLCJtZW1iZXIiOiJ7XCJJZFwiOlwiNTgwMDc4MGYtMjMyMy00ZTdjLWFmMDEtOWEyNzY4NDE0N2MyXCIsXCJOYW1lXCI6XCJncmlzc29tXCIsXCJOaWNrTmFtZVwiOlwiR2lsXCIsXCJSb2xlXCI6XCJhZG1pblwifSJ9.Rr1g94btU8oxJ3ci7dg3OY_QEj2sBhxI-YtyFZQONbQ",
"expired_in": 1532365375
}
4.2.2 獲取當前會員資訊
- 使用 GET 方法請求;
- Content-Type 設定為 application/json;
- Authorization 設定為上面生成的 token, 格式: Bearer {token} 如
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MzIzNjUzNzUsInVzZXJuYW1lIjoiZ3Jpc3NvbSIsInJvbGVzIjoiYWRtaW4iLCJtZW1iZXIiOiJ7XCJJZFwiOlwiNTgwMDc4MGYtMjMyMy00ZTdjLWFmMDEtOWEyNzY4NDE0N2MyXCIsXCJOYW1lXCI6XCJncmlzc29tXCIsXCJOaWNrTmFtZVwiOlwiR2lsXCIsXCJSb2xlXCI6XCJhZG1pblwifSJ9.Rr1g94btU8oxJ3ci7dg3OY_QEj2sBhxI-YtyFZQONbQ
- 請求路徑: http://localhost:5000/api/v1/member/getcurrentmemberinfo
4.3 News
會員服務: 獲取所有新聞、獲取指定新聞、釋出新聞 都是受保護的 api (EnableAuthorization:true),所以呼叫時都需要帶上 token
4.3.1 獲取所有新聞
- 使用 GET 方法請求;
- Content-Type 設定為 application/json;
- Authorization 設定為上面生成的 token, 格式: Bearer {token}
- 呼叫路徑: api/v1/news/getallnews
4.3.2 釋出新聞
釋出新聞的介面接受的是一個物件,所以需要用 POST
- 使用 POST 方法請求;
- Content-Type 設定為 application/json;
- Authorization 設定為上面生成的 token, 格式: Bearer {token}
- 呼叫路徑: api/v1/news/postnews
根據返回的 id 獲取該篇新聞
4.3.3 角色限制
我們看看釋出新聞方法的宣告
指定了 Roles="admin"
, 即需要具有 admin 角色的使用者才能訪問, 而上面呼叫釋出新聞的使用者是 grissom , 在模擬資料裡配置了他屬於 admin 角色
而使用者 Foo 的角色是 guest, 我們換成他去獲取 token, 然後再呼叫釋出新聞的 api, 會報錯: 未授權