curl http://httpbin.org/orders?version=v1

# 請(qǐng)求 v2 版本的API
curl http://httpbin.org/v2/orders?version=v2
# 請(qǐng)求 v1 版本的API
curl http://httpbin.org/orders -H "custom-version: v1"

# 請(qǐng)求 v2 版本的API
curl http://httpbin.org/orders -H "custom-version: v2"

作為一個(gè)動(dòng)態(tài)、實(shí)時(shí)、高性能的 API 網(wǎng)關(guān),Apache APISIX 可以在任何 RESTful API 服務(wù)上運(yùn)行,并使用插件來(lái)添加新的服務(wù)和擴(kuò)展其功能,這符合 RESTful 定義中的?Layered system。此外,對(duì)于一些沒(méi)有遵循 RESTful API 定義的歷史服務(wù), APISIX 也可以幫你在不改動(dòng)原有業(yè)務(wù)代碼的情況下完成接口的轉(zhuǎn)換,使你的接口完成?Uniform interface?這一 REST 限制條件,使你的 API 可以更好地遵守 RESTful API 規(guī)范。

分層系統(tǒng):支持業(yè)務(wù)邏輯和安全邏輯的分割?

你可以只用關(guān)注業(yè)務(wù)邏輯的實(shí)現(xiàn),接口的安全邏輯可以交給 APISIX Authentication 類(lèi)插件處理,例如?key-auth。APISIX 支持大量的 Authentication 插件,我們以?openid-connet?為例如下圖所示:

APISIX 的作用

我們可以看到,使用 APISIX(API Gateway)在業(yè)務(wù)服務(wù)器前面加一層認(rèn)證邏輯,就可以起到保護(hù)上游服務(wù)的作用,讓你的業(yè)務(wù)邏輯和安全邏輯高效解耦。

Layered system:多負(fù)載均衡協(xié)議支持?

APISIX 作為 API 網(wǎng)關(guān),可以設(shè)立在客戶端和服務(wù)端之間,完成不同的負(fù)載需求。你甚至可以自定義負(fù)載均衡的邏輯。

支持的負(fù)載均衡算法有:

統(tǒng)一接口:使歷史 API 更加 RESTful?

對(duì)于已經(jīng)存在很久的歷史 API,如果沒(méi)有很好地遵循 RESTful API 準(zhǔn)則。你可以在不改造原有 API 邏輯的情況下重新通過(guò) APISIX 來(lái)封裝新的 API 以滿足不同的業(yè)務(wù)場(chǎng)景。

使用?proxy-rewrite?改寫(xiě)客戶端請(qǐng)求?

在本文中上方提過(guò)我們的路徑中不要有動(dòng)詞。

例如:歷史版本 API 有 /getOrder 接口,我們可以通過(guò) proxy-rewrite 插件來(lái)將 API 請(qǐng)求代理到歷史 API 上:

curl http://127.0.0.1:9080/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"methods": ["GET"],
"uri": "/orders",
"plugins": {
"proxy-rewrite": {
"uri": "/getOrder",
"scheme": "http",
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:80": 1
}
}
}'

你也可以同樣使用該插件進(jìn)行 API 版本管理上的操作。

使用?response-rewrite?插件改寫(xiě)服務(wù)端響應(yīng)?

當(dāng)我們的歷史 API 存在響應(yīng)狀態(tài)碼不規(guī)范時(shí),我們可以通過(guò) response-rewrite 代理 response 響應(yīng)從而達(dá)到修改響應(yīng)狀態(tài)碼的目的。

curl http://127.0.0.1:9080/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"methods": ["GET"],
"uri": "/orders",
"plugins": {
"response-rewrite": {
"status_code": 201,
"body": "{\"code\":\"ok\",\"message\":\"new json body\"}",
"vars":[
[ "status","==",200 ]
]
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:80": 1
}
}
}

例如,這個(gè)例子表示將請(qǐng)求?/orders?路徑的 API 中響應(yīng)為?200?的狀態(tài)的請(qǐng)求修改為?201。 APISIX 支持非常豐富的插件,期待你去挖掘更多的玩法。

總結(jié)?

本文詳細(xì)說(shuō)明了什么是 API,什么是 RESTful API 以及其最佳實(shí)踐。另外還介紹了如何通過(guò) APISIX 來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯和安全邏輯分離,如何使用 APISIX 在不改動(dòng)原有業(yè)務(wù)代碼的情況下將歷史 API 服務(wù)更加 RESTful。希望本文對(duì)你了解 RESTful API 有所幫助,也歡迎你來(lái) GitHub 一起玩耍。

文章來(lái)源:Why has RESTful API become the top stream API architecture style?

上一篇:

編寫(xiě)API文檔的新方法

下一篇:

如何利用Apache APISIX實(shí)現(xiàn)高效的API認(rèn)證與鑒權(quán):全面解析主流認(rèn)證方式
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門(mén)場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)