tft每日頭條

 > 生活

 > springboot計算框架

springboot計算框架

生活 更新时间:2024-07-26 03:50:11

springboot計算框架(基于SpringBoot的騰訊雲函數調試)1

前面兩篇文章騰訊雲無服務器雲函數實踐和騰訊雲API網關實踐分别介紹了如何用雲函數和API網關搭建無服務器的後端,今天主要介紹如何在本地開發調試。

開發基于API網關調用的雲函數,最難的莫過于調試了,你的函數實現或者路徑參數一旦修改,就必須重新上傳代碼或者重新發布API網關,才能正常使用。而在開發過程中,這些步驟就顯得重複而繁瑣。

怎麼才能解決本地調試的問題呢?

今天,我們就搭建一個基于SpringBoot的本地開發環境,可以方便我們開發和調試無服務器雲函數和API網關。

springboot計算框架(基于SpringBoot的騰訊雲函數調試)2

設計思路:
  1. 通過Springboot可以快速啟動一個本地的服務。
  2. 注冊一個Component将我們所有的API網關請求的函數注冊到服務中。
  3. 通過添加Filter來攔截所有的請求。
  4. 在Filter中将Servlet請求封裝成API網關的入口參數Gateway。
  5. 調用第2步中的函數進行處理。

springboot計算框架(基于SpringBoot的騰訊雲函數調試)3

注意事項:

一. 跨域訪問(CORS)的設置

由于所有的請求都被攔截,所以在response中要設置能夠跨域訪問的所有的頭信息。

response.setHeader("Access-Control-Allow-Origin", header); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "X-Api-ID,X-Service-RateLimit,X-UsagePlan-RateLimit,X-UsagePlan- Quota,Cache-Control,Connection,Content-Disposition,Date,Keep-Alive,Pragma,Via,Accept,Accept-Charset,Accept-Encoding,Accept-Language,Authorization,Cookie,Expect,From,Host,If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,Range,Origin,Referer,User-Agent,X-Forwarded-For,X-Forwarded-Host,X-Forwarded-Proto,Accept-Range,Age,Content-Range,Content-Security-Policy,ETag,Expires,Last-Modified,Location,Server,Set-Cookie,Trailer,Transfer-Encoding,Vary,Allow,Content-Encoding,Content-Language,Content-Length,Content-Location,Content-Type,X-Date,Source,X-Acpt"); response.setHeader("Access-Control-Allow-Credentials", "true");

二. 由于跨域訪問一般會進行2次請求,所以一定要先處理預請求信息(OPTIONS)

if (request.getMethod().equals("OPTIONS")) { response.setStatus(HttpServletResponse.SC_OK); return; }

三. 獲取Servlet請求的body,一定要在請求最開始的時候獲取。(Request被讀取一次之後Reader就為空了)

// 在請求的最開始階段,獲取body信息。 if (request instanceof HttpServletRequest) { if ("POST".equalsIgnoreCase(((HttpServletRequest) request).getMethod())) { try { body = request.getReader().lines().collect(Collectors.joining(System.lineSeparator())); } catch (IOException e) { e.printStackTrace(); } } }

四. 一定要把Filter的優先級設置為最高

@Order(Ordered.HIGHEST_PRECEDENCE)


打開底部的鍊接,可以獲取源碼。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved