偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

如何設(shè)計(jì)實(shí)現(xiàn)一個輕量的開放API網(wǎng)關(guān)

新聞 架構(gòu)
隨著業(yè)務(wù)的發(fā)展, 所對接的第三方越來越多, 各個業(yè)務(wù)系統(tǒng)面臨著同樣一個問題: 如何讓第三方安全快速接入. 此時有一個集驗(yàn)簽、鑒權(quán)、限流、降級等功能于一身的API網(wǎng)關(guān)服務(wù)變得尤為重要.

前言

隨著業(yè)務(wù)的發(fā)展, 所對接的第三方越來越多, 各個業(yè)務(wù)系統(tǒng)面臨著同樣一個問題: 如何讓第三方安全快速接入. 此時有一個集驗(yàn)簽、鑒權(quán)、限流、降級等功能于一身的API網(wǎng)關(guān)服務(wù)變得尤為重要.

接下來將分享如何設(shè)計(jì)實(shí)現(xiàn)一個輕量級的API開放網(wǎng)關(guān), 包括接口設(shè)計(jì)、數(shù)據(jù)庫設(shè)計(jì)、簽名驗(yàn)簽方案、鑒權(quán)等. 本文側(cè)重于總體設(shè)計(jì), 具體實(shí)現(xiàn)細(xì)節(jié)將陸續(xù)在后續(xù)的文章中分享.

API網(wǎng)關(guān)簡介

API網(wǎng)關(guān)在微服務(wù)中尤為重要, 其抽象了鑒權(quán)、限流、降級等各個業(yè)務(wù)系統(tǒng)通用的功能. 作為眾多內(nèi)部業(yè)務(wù)系統(tǒng)外的一層屏障.

基本需求

  1. 簽名及驗(yàn)簽
  2. 鑒權(quán)
  3. 路由
  4. 權(quán)限及資源管理

總體設(shè)計(jì)

驗(yàn)簽、鑒權(quán)等功能以職責(zé)鏈的方式進(jìn)行處理, 網(wǎng)關(guān)根據(jù)配置進(jìn)行路由并附加參數(shù)用以配合業(yè)務(wù)系統(tǒng)進(jìn)行處理(如數(shù)據(jù)過濾等). 簡要請求處理流程如下:

如何設(shè)計(jì)實(shí)現(xiàn)一個輕量的開放API網(wǎng)關(guān)

接口設(shè)計(jì)

網(wǎng)關(guān)最基本的功能是轉(zhuǎn)發(fā)請求, 常見的方式是根據(jù)配置中的路由規(guī)則將請求轉(zhuǎn)發(fā)給內(nèi)部服務(wù), 如:

將/order/*的請求轉(zhuǎn)發(fā)給內(nèi)部的訂單系統(tǒng)、/user/*的請求轉(zhuǎn)發(fā)給內(nèi)部的用戶系統(tǒng), 這種做法常用于對整個業(yè)務(wù)系統(tǒng)負(fù)責(zé)的基礎(chǔ)網(wǎng)關(guān).

而本文所設(shè)計(jì)的是服務(wù)于第三方的開放API網(wǎng)關(guān), 并未使用上述做法, 而是將請求的資源作為參數(shù)放到請求體中, 其原因如下:

  1. 開放API服務(wù)于第三方, 屏蔽內(nèi)部路徑, 有利于提供命名統(tǒng)一且規(guī)范的接口.
  2. 請求接口的映射由網(wǎng)關(guān)的路由表維護(hù), 內(nèi)部接口升級甚至切換到新服務(wù)對外接口不變.
  3. 能夠更細(xì)粒度地針對接口進(jìn)行權(quán)限控制、限流、統(tǒng)計(jì)等.

地址

開放API網(wǎng)關(guān)對外提供唯一入口, 具體請求的資源作為參數(shù)傳入.

公共參數(shù)

為了簡化簽名和驗(yàn)簽的操作, 同時也提高靈活度, 唯一入口的約定了固定的公共參數(shù)和返回值, 如下:

公共請求參數(shù)

如何設(shè)計(jì)實(shí)現(xiàn)一個輕量的開放API網(wǎng)關(guān)
  • app_id: 應(yīng)用ID, 應(yīng)用ID是授權(quán)的主體, 是調(diào)用方的身份標(biāo)識
  • method: 請求方法, 與內(nèi)部URL對應(yīng), 由網(wǎng)關(guān)的路由表維護(hù).
  • timestamp和nonce用來防重放攻擊.
  • biz_content: 業(yè)務(wù)參數(shù), 這個參數(shù)將轉(zhuǎn)發(fā)給內(nèi)部業(yè)務(wù)系統(tǒng).

公共返回參數(shù)

如何設(shè)計(jì)實(shí)現(xiàn)一個輕量的開放API網(wǎng)關(guān)
  • biz_content: 返回業(yè)務(wù)參數(shù), 網(wǎng)關(guān)轉(zhuǎn)發(fā)業(yè)務(wù)系統(tǒng)的返回值.

[版權(quán)聲明]

本文發(fā)布于樸瑞卿的博客, 允許非商業(yè)用途轉(zhuǎn)載, 但轉(zhuǎn)載必須保留原作者樸瑞卿 及鏈接:http://blog.piaoruiqing.com. 如有授權(quán)方面的協(xié)商或合作, 請聯(lián)系郵箱: piaoruiqing@gmail.com.

簽名方案

調(diào)用方和服務(wù)方均生成2048位RSA秘鑰, 交換公鑰. 私鑰用于簽名, 公鑰用于驗(yàn)簽, 開放API網(wǎng)關(guān)對外接口使用https, 故暫不需額外做加密處理.

簽名算法

如何設(shè)計(jì)實(shí)現(xiàn)一個輕量的開放API網(wǎng)關(guān)

簽名規(guī)則

簽名參數(shù)內(nèi)容

剔除sign之后的全部參數(shù).

簽名參數(shù)排序

按照參數(shù)名的ASCII碼遞增排序(字母升序排序).

簽名生成方式

排序后的參數(shù)列表組合成參數(shù)名a=參數(shù)值a&參數(shù)名b=參數(shù)值b&...&參數(shù)名z=參數(shù)值z的字符串, 并使用私鑰生成sign.

數(shù)據(jù)庫設(shè)計(jì)

數(shù)據(jù)庫用于存儲秘鑰權(quán)限等配置, 程序和數(shù)據(jù)庫之間有多級緩存用以提高訪問速度. 簡要ER圖如下:

如何設(shè)計(jì)實(shí)現(xiàn)一個輕量的開放API網(wǎng)關(guān)
  • app: 調(diào)用方主體, 用于標(biāo)識請求方身份.
  • group: 組, app分組, 可通過group統(tǒng)一進(jìn)行授權(quán).
  • subject: 主體(app/group).
  • resource: 資源, 維護(hù)請求資源與內(nèi)部接口的映射關(guān)系, url+http_method 對應(yīng)唯一的resource_id.

技術(shù)選型

網(wǎng)關(guān)除了滿足功能上的需求外, 性能上的需求也需要著重考慮, 畢竟作為各個業(yè)務(wù)系統(tǒng)對外的唯一入口, 網(wǎng)關(guān)的性能可能會成為整個業(yè)務(wù)系統(tǒng)的瓶頸. 業(yè)務(wù)并不復(fù)雜, 性能要求高, 響應(yīng)式編程正是一個不錯的選擇.

  • Spring WebFlux + netty: 響應(yīng)式Web框架.
  • Spring Data Reactive Redis + Lettuce: 響應(yīng)式redis客戶端.
  • Guava: Google工具包, 使用LoadingCache作為進(jìn)程內(nèi)緩存.

結(jié)語

網(wǎng)關(guān)作為內(nèi)部系統(tǒng)外面的一層屏障和入口, 除基本功能和性能上的需求外, 監(jiān)控、統(tǒng)計(jì)、日志等都是需要考慮到的問題, 網(wǎng)關(guān)方面開源產(chǎn)品眾多, 但選擇時一定要考慮自身業(yè)務(wù), 適合自身的前提下參考各個成熟的方案進(jìn)行實(shí)踐.

 

責(zé)任編輯:張燕妮 來源: 騰訊云
相關(guān)推薦

2018-11-26 08:06:24

API網(wǎng)關(guān)億級

2013-07-01 11:01:22

API設(shè)計(jì)API

2020-09-22 07:50:23

API接口業(yè)務(wù)

2018-11-01 13:23:02

網(wǎng)關(guān)APIHTTP

2021-04-09 08:13:14

API網(wǎng)關(guān)互聯(lián)網(wǎng)

2024-09-06 11:02:15

API網(wǎng)關(guān)插件

2018-12-10 13:50:16

網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全技術(shù)周刊

2021-03-16 16:35:39

網(wǎng)關(guān)Java代碼

2014-08-13 19:14:26

2015-03-27 18:05:00

2023-06-26 10:51:56

開源API

2022-04-15 11:46:09

輕量系統(tǒng)解耦鴻蒙操作系統(tǒng)

2022-12-30 08:16:34

2021-02-04 11:11:08

開發(fā)技能工具

2021-02-04 11:46:49

GithubSQL工具Franchise

2018-09-18 09:38:11

RPC遠(yuǎn)程調(diào)用網(wǎng)絡(luò)通信

2020-03-26 09:36:06

AB Test平臺的流量

2025-06-11 02:11:00

2024-04-24 10:38:22

2021-05-28 18:12:51

C++設(shè)計(jì)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號