編寫第一個GET、POST接口[renren-fast框架系列(1)]
- 2022 年 3 月 13 日
- 筆記
配置好 renren-fast 腳手架,學習完 Spring MVC 架構後,我需要具體調試 renren-fast 的接口,比如要新增某個接口。
什麼是前後端分離
運行 renren-fast 項目時,我們訪問 //localhost:8080/renren-fast/ 的結果:
可以看到,接口給出了相應的回應,狀態碼 401 Unauthorized 代表客戶端錯誤,指的是由於缺乏目標資源要求的身份驗證憑證,發送的請求未得到滿足。
運行 renren-fast-vue 項目時,我們訪問 //localhost:8001/#/login :
接着使用Chrome自帶的網絡工具:
點擊 Headers 可以查看 Request URL:
以此,我們確認訪問 後台接口為://localhost:8080/renren-fast/captcha.jpg?uuid=11e75e91-f584-4e38-804b-d6776535eed9
同時還可以看到如下獲取頁面信息的 headers:
請求的訪問接口是://localhost:8001/static/config/index.js
至此,我們便搞清楚了 renren-fast 前後端分離的業務是在說什麼,即:後端邏輯使用 renren-fast 實現,前端請求獲取的頁面數據,使用 renren-fast-vue 實現。
寫一個無需鑒權的GET接口
接下來我們基於 renren-fast 框架仿照 “/captcha.jpg” 寫第一個接口, “/captcha.jpg”接口代碼:
/**
* 驗證碼
*/
@GetMapping("captcha.jpg")
public void captcha(HttpServletResponse response, String uuid)throws IOException {
response.setHeader("Cache-Control", "no-store, no-cache");
response.setContentType("image/jpeg");
//獲取圖片驗證碼
BufferedImage image = sysCaptchaService.getCaptcha(uuid);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
IOUtils.closeQuietly(out);
}
我們寫一個 /testInterface 接口,在沒寫接口之前,我們訪問: //localhost:8080/renren-fast/testInterface ,返回如下樣式:
我們編寫接口:
/**
* 測試接口
*/
@GetMapping("/testInterface")
public String testInterface() {
return "hello";
}
部署完之後訪問: //localhost:8080/renren-fast/testInterface ,仍舊是展示:
那問題來了,我們這個接口部署的有問題嗎? 顯然是沒有問題的,只是一個簡單示例,接着我們在代碼中搜索 “{“msg”:”![invalid token]”,”code”:401}” ,可以發現有這麼一句:
這意味着即使我們部署了接口,如果token不存在,也依舊會返回 401,但我們這個接口不需要 token 鑒權,所以要配置無需鑒權的邏輯。
我們從哪裡可以知道怎麼配置如需鑒權呢? 還記得我們上面發現的一個無需鑒權的接口嗎?
//localhost:8080/renren-fast/captcha.jpg?uuid=11e75e91-f584-4e38-804b-d6776535eed9
/captcha.jpg 這個接口無需登錄,只要任意修改uuid就能獲取驗證碼,所以我們全局搜索 /captcha.jpg,可以發現有3處地方:
一處是配置 filterMap,也就是無需鑒權的接口,我們在同樣的地方加上我們自己的 testInterface 接口:
另一處是配置接口參數、描述、回包數據等,我們也簡單配置一下:
配置完畢後重新部署,重新訪問 //localhost:8080/renren-fast/testInterface ,可以發現頁面展示:
接口部署成功!
調試一個需要鑒權的GET接口
GET 接口可以簡單理解為從服務器獲取數據,只是讀數據;而POST接口允許通過請求讓服務器做一些事情:比如寫數據、刪數據等等。
當我們登錄時,是向 //localhost:8080/renren-fast/sys/login 發送 POST 請求,我們來使用 Postman 模擬發送 post請求,
首先,我們要獲取 驗證碼,我們請求: //localhost:8080/renren-fast/captcha.jpg?uuid=11e75e93 ,獲取驗證碼:b676b
接着我們查看 /sys/login 接口代碼得知:
登錄接口所必須的參數有:
- uuid
- captcha
- username
- password
使用Postman發送Post請求成功:
我們獲取 token 為 5d68f7779618adba8a1fb37df4bbe8e6 ,那是不是意味着我們可以通過 token 訪問那些有權限的接口了呢?我們試試:
我們使用 Postman 發送 GET 請求: //localhost:8080/renren-fast/sys/menu/nav?t=1647101933260&token=5d68f7779618adba8a1fb37df4bbe8e6
果然回包成功了:
小結
通過本篇文章的學習,我們明確了如下的內容:
- renren-fast 前後端分離的設計理念
- 學會配置一個無需鑒權的簡單接口
- 通過postman調試了鑒權post邏輯和get邏輯
至此我們可以自由編寫 鑒權接口 和 非鑒權接口。
文章首發:問我社區