編寫第一個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邏輯

至此我們可以自由編寫 鑒權接口 和 非鑒權接口。


文章首發:問我社區