RESTful API 設(shè)計(jì)最佳實(shí)踐

設(shè)計(jì)RESTful API時(shí),需要遵循一些最佳實(shí)踐,以確保API的可讀性、可維護(hù)性和一致性。

路徑名稱避免動(dòng)詞

使用HTTP方法表達(dá)資源操作行為,而不是將行為動(dòng)詞定義到路徑中。

curl -X GET http://httpbin.org/orders

curl -X GET "http://httpbin.org/getOrders"

URI 使用復(fù)數(shù)形式

使用復(fù)數(shù)形式可以更清晰地表達(dá)資源的集合。

curl -X GET "http://httpbin.org/orders"

curl -X GET "http://httpbin.org/order"

善用 HTTP 狀態(tài)碼

使用標(biāo)準(zhǔn)狀態(tài)碼可以幫助快速識別問題。

版本管理

隨著業(yè)務(wù)需求的變更,已經(jīng)上線的API需要對應(yīng)調(diào)整。引入API版本管理可以保證歷史API正常使用,同時(shí)迭代新的API以滿足新的業(yè)務(wù)需求。

curl  http://httpbin.org/v1/orders

curl http://httpbin.org/v2/orders

Apache APISIX 如何助力RESTful API

Apache APISIX是一個(gè)動(dòng)態(tài)、實(shí)時(shí)、高性能的API網(wǎng)關(guān),可以在任何RESTful API服務(wù)上運(yùn)行,并使用插件來添加新的服務(wù)和擴(kuò)展其功能。

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

APISIX可以在業(yè)務(wù)服務(wù)器前面加一層認(rèn)證邏輯,保護(hù)上游服務(wù),實(shí)現(xiàn)業(yè)務(wù)邏輯和安全邏輯的高效解耦。

APISIX 的作用

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

APISIX作為API網(wǎng)關(guān),可以設(shè)立在客戶端和服務(wù)端之間,完成不同的負(fù)載需求。支持的負(fù)載均衡算法包括roundrobin、chash、ewma和least_conn。

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

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

使用 proxy-rewrite 改寫客戶端請求

例如,歷史版本API有 /getOrder 接口,可以通過 proxy-rewrite 插件將API請求代理到歷史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
}
}
}'

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

當(dāng)歷史API存在響應(yīng)狀態(tài)碼不規(guī)范時(shí),可以通過 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
}
}
}'

FAQ

問:RESTful API的優(yōu)勢有哪些?

答:RESTful API的優(yōu)勢包括客戶端與服務(wù)端關(guān)注點(diǎn)分離、無狀態(tài)特性使得應(yīng)用更易擴(kuò)展、容易實(shí)現(xiàn)緩存策略提升系統(tǒng)性能和用戶體驗(yàn)。

問:如何設(shè)計(jì)一個(gè)符合RESTful風(fēng)格的API?

答:要設(shè)計(jì)一個(gè)符合RESTful風(fēng)格的API,需要遵循使用HTTP方法表達(dá)資源操作行為、URI使用復(fù)數(shù)形式、善用HTTP狀態(tài)碼、版本管理等最佳實(shí)踐。

問:Apache APISIX如何幫助實(shí)現(xiàn)RESTful API?

答:Apache APISIX作為一個(gè)動(dòng)態(tài)、實(shí)時(shí)、高性能的API網(wǎng)關(guān),可以運(yùn)行在任何RESTful API服務(wù)上,使用插件添加新的服務(wù)和擴(kuò)展功能,支持業(yè)務(wù)邏輯和安全邏輯的分割,以及使歷史API更加RESTful。

問:為什么要使用API版本管理?

答:API版本管理可以在不影響現(xiàn)有客戶端使用歷史API的情況下,迭代新的API以滿足新的業(yè)務(wù)需求,保證了歷史API的正常使用和新API的引入。

問:如何通過APISIX使歷史API更加RESTful?

答:可以通過APISIX的proxy-rewriteresponse-rewrite插件,在不改造原有API邏輯的情況下,重新封裝新的API以滿足RESTful API準(zhǔn)則。

總結(jié)

本文詳細(xì)介紹了RESTful API的概念、核心約束條件、設(shè)計(jì)最佳實(shí)踐,以及Apache APISIX如何助力RESTful API的實(shí)現(xiàn)。希望本文能幫助您深入了解RESTful API,并在實(shí)際開發(fā)中運(yùn)用這些最佳實(shí)踐,構(gòu)建高效、可擴(kuò)展的API服務(wù)。

上一篇:

聯(lián)絡(luò)中心 AI 的 Apigee 最佳實(shí)踐

下一篇:

使用 Apigee 優(yōu)化 API 管理成本的 6 種方法
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

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

查看全部API→
??

熱門場景實(shí)測,選對API

#AI文本生成大模型API

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

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

#AI深度推理大模型API

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

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