dotnet core微服務框架Jimu ~部署和呼叫演示

Flamesky發表於2024-12-10

首先執行 consul

下載 consul

以開發模式執行

consul agent -dev

2. 除錯

  1. 用 Visual Studio 2022 IDE 開啟專案;
  2. 右擊解決方案-選擇“屬性”
  3. 在屬性介面下,選擇多專案啟動, News.Server, Auth.Server, Register.Server, ApiGateway 幾個專案的操作方式選擇為“啟動”;

如下圖 jimu_demo_debug

3. 部署

  1. 用 Visual Studio 2022 IDE 開啟專案;
  2. 右擊 News.Server 專案,選擇“釋出”(Auth.Server,Register.Server,ApiGateway 同理)
  3. 選擇釋出的資料夾;
  4. 用命令提示符進入資料夾,啟動專案
dotnet News.Server.dll

如下圖

jimu_demo_publish_setting

jimu_demo_register_server

apigateway & server jimu_demo_apigateway

service jimu_demo_apigateway_service jimu_demo_apigateway_service_all service detial jimu_demo_apigateway_serivce_detial

4. postman 呼叫

呼叫方不需要知道微服務部署的地址,直接訪問閘道器就可以了。
開啟閘道器的服務列表可以看到所有服務的呼叫路徑,在展開服務的明細可看到更多關於該服務的資訊,如授權、角色限制等。

jimu_demo_api

直接複製上面所示的呼叫地址,下面用 postman 對 api 進行呼叫:

4.1 Register

4.1.1 判斷使用者名稱 grissom 是否可用

  1. 使用 GET 方法請求;
  2. Content-Type 設定為 application/json; jimu_demo_api_call

jimu_demo_api_call_result

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 需要:

  1. 使用 Post 方法請求;
  2. Content-Type 設定為 application/json;
  3. Body 用 json 格式, 如 {"username":"grissom","password":"123"};

jimu_demo_api_token_setting_header

jimu_demo_api_token_setting_body

jimu_demo_api_token_call_result

返回結果是一個 json 格式的物件, access_token 就是生成的 token, expired_in (數字時間戳從 1970 到現在的秒數)是 token 的失效時間

{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MzIzNjUzNzUsInVzZXJuYW1lIjoiZ3Jpc3NvbSIsInJvbGVzIjoiYWRtaW4iLCJtZW1iZXIiOiJ7XCJJZFwiOlwiNTgwMDc4MGYtMjMyMy00ZTdjLWFmMDEtOWEyNzY4NDE0N2MyXCIsXCJOYW1lXCI6XCJncmlzc29tXCIsXCJOaWNrTmFtZVwiOlwiR2lsXCIsXCJSb2xlXCI6XCJhZG1pblwifSJ9.Rr1g94btU8oxJ3ci7dg3OY_QEj2sBhxI-YtyFZQONbQ",
    "expired_in": 1532365375
}

4.2.2 獲取當前會員資訊

  1. 使用 GET 方法請求;
  2. Content-Type 設定為 application/json;
  3. Authorization 設定為上面生成的 token, 格式: Bearer {token} 如
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MzIzNjUzNzUsInVzZXJuYW1lIjoiZ3Jpc3NvbSIsInJvbGVzIjoiYWRtaW4iLCJtZW1iZXIiOiJ7XCJJZFwiOlwiNTgwMDc4MGYtMjMyMy00ZTdjLWFmMDEtOWEyNzY4NDE0N2MyXCIsXCJOYW1lXCI6XCJncmlzc29tXCIsXCJOaWNrTmFtZVwiOlwiR2lsXCIsXCJSb2xlXCI6XCJhZG1pblwifSJ9.Rr1g94btU8oxJ3ci7dg3OY_QEj2sBhxI-YtyFZQONbQ
  1. 請求路徑: http://localhost:5000/api/v1/member/getcurrentmemberinfo

jimu_demo_api_currentmemberinfo_call_result

4.3 News

會員服務: 獲取所有新聞、獲取指定新聞、釋出新聞 都是受保護的 api (EnableAuthorization:true),所以呼叫時都需要帶上 token

4.3.1 獲取所有新聞

  1. 使用 GET 方法請求;
  2. Content-Type 設定為 application/json;
  3. Authorization 設定為上面生成的 token, 格式: Bearer {token}
  4. 呼叫路徑: api/v1/news/getallnews

jimu_demo_api_getallnews_call_result

4.3.2 釋出新聞

釋出新聞的介面接受的是一個物件,所以需要用 POST

  1. 使用 POST 方法請求;
  2. Content-Type 設定為 application/json;
  3. Authorization 設定為上面生成的 token, 格式: Bearer {token}
  4. 呼叫路徑: api/v1/news/postnews

jimu_demo_api_postnews_call_result

根據返回的 id 獲取該篇新聞 jimu_demo_api_getnews_call_result

4.3.3 角色限制

我們看看釋出新聞方法的宣告 jimu_demo_api_role_setting

指定了 Roles="admin", 即需要具有 admin 角色的使用者才能訪問, 而上面呼叫釋出新聞的使用者是 grissom , 在模擬資料裡配置了他屬於 admin 角色 jimu_demo_api_role

而使用者 Foo 的角色是 guest, 我們換成他去獲取 token, 然後再呼叫釋出新聞的 api, 會報錯: 未授權 jimu_demo_api_postnews_call_result_unauthorized

相關文章