新聞中心
在這次深入探討中,我們將深入了解API設(shè)計(jì),從基礎(chǔ)知識(shí)開始,逐步進(jìn)階到定義出色API的最佳實(shí)踐。

公司主營(yíng)業(yè)務(wù):網(wǎng)站制作、做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出衡陽(yáng)縣免費(fèi)做網(wǎng)站回饋大家。
作為開發(fā)者,你可能對(duì)許多這些概念很熟悉,但我將提供詳細(xì)的解釋,以加深你的理解。
API設(shè)計(jì):電子商務(wù)示例
讓我們考慮一個(gè)類似Shopify這樣的電子商務(wù)平臺(tái)的API。如果你不熟悉Shopify,它是一個(gè)著名的電子商務(wù)平臺(tái),允許企業(yè)建立在線商店。
在API設(shè)計(jì)中,我們關(guān)注定義API的輸入(比如新產(chǎn)品的產(chǎn)品詳情)和輸出(比如當(dāng)某人查詢產(chǎn)品時(shí)返回的信息)。
這意味著我們關(guān)注的是接口而不是低級(jí)實(shí)現(xiàn)。
API設(shè)計(jì)和CRUD:
因此,焦點(diǎn)主要是定義CRUD操作如何向使用您的電子商務(wù)API的用戶或系統(tǒng)公開。
CRUD代表Create、Read、Update、Delete。這些是任何數(shù)據(jù)驅(qū)動(dòng)應(yīng)用程序的基本操作。
例如,要添加新產(chǎn)品(創(chuàng)建),您將通過POST請(qǐng)求發(fā)送到/api/products,其中產(chǎn)品詳情包含在請(qǐng)求體中。
- 要檢索產(chǎn)品(讀取),您需要使用GET請(qǐng)求從/products獲取數(shù)據(jù)。
- 要更新產(chǎn)品信息(更新),我們使用PUT或PATCH請(qǐng)求到/products/:id,其中id是需要更新的產(chǎn)品的id。
- 刪除類似于更新;我們通過DELETE請(qǐng)求到/products/:id,其中id是需要移除的產(chǎn)品。
另一部分是決定要使用的通信協(xié)議,比如HTTP、WebSockets等,以及數(shù)據(jù)傳輸機(jī)制:JSON、XML或Protocol Buffers。
這適用于RESTful API,但我們還有GraphQL或gRPC范例。
API范例
API有不同的范例,每個(gè)范例都有其自己的一套協(xié)議和標(biāo)準(zhǔn)。
1.REST(表述性狀態(tài)轉(zhuǎn)移)
- 優(yōu)勢(shì): 無(wú)狀態(tài):客戶端到服務(wù)器的每個(gè)請(qǐng)求都必須包含理解和完成請(qǐng)求所需的所有信息。使用標(biāo)準(zhǔn)的HTTP方法(GET、POST、PUT、DELETE)。易于被不同客戶端(瀏覽器、移動(dòng)應(yīng)用)消費(fèi)。
- 缺點(diǎn): 這可能導(dǎo)致數(shù)據(jù)的過多或過少獲取-因?yàn)榭赡苄枰嗟亩它c(diǎn)來(lái)訪問特定的數(shù)據(jù)。
- 特性: 支持分頁(yè)、過濾(**limit**、**offset**)和排序。使用JSON進(jìn)行數(shù)據(jù)交換。
2.GraphQL
- 優(yōu)勢(shì): 允許客戶端請(qǐng)求確切需要的內(nèi)容,避免過多或過少獲取?;趶?qiáng)類型模式的查詢。
- 缺點(diǎn): 復(fù)雜的查詢可能會(huì)影響服務(wù)器性能。所有請(qǐng)求都以POST請(qǐng)求發(fā)送。
- 特性: 通常以HTTP 200狀態(tài)碼回應(yīng),即使在錯(cuò)誤的情況下也是如此,并在響應(yīng)體中提供錯(cuò)誤詳細(xì)信息。
3.gRPC(Google遠(yuǎn)程過程調(diào)用)
- 優(yōu)勢(shì): 構(gòu)建在HTTP/2之上,提供了高級(jí)功能,如多路復(fù)用和服務(wù)器推送。使用Protocol Buffers,一種語(yǔ)言中立、平臺(tái)中立、可擴(kuò)展的序列化結(jié)構(gòu)化數(shù)據(jù)的方式。在帶寬和資源方面效率高,特別適用于微服務(wù)。
- 缺點(diǎn): 與JSON相比,可讀性較差。需要支持HTTP/2。
- 特性: 支持?jǐn)?shù)據(jù)流和雙向通信。適用于服務(wù)器間通信。
API設(shè)計(jì)中的關(guān)系
在電子商務(wù)環(huán)境中,您可能會(huì)有諸如用戶到訂單、訂單到產(chǎn)品等的關(guān)系。
設(shè)計(jì)端點(diǎn)以反映這些關(guān)系是重要的。例如,在這種情況下,**GET /users/{userId}/orders**應(yīng)該為特定用戶獲取訂單。
1.GET請(qǐng)求的查詢、限制和冪等性
常見的查詢還包括用于分頁(yè)的**limit**和**offset**,或者用于在某個(gè)日期范圍內(nèi)過濾產(chǎn)品的**startDate**和**endDate**。這允許用戶檢索特定集合的數(shù)據(jù),而不會(huì)一次性向系統(tǒng)或用戶提供太多信息。
設(shè)計(jì)良好的GET請(qǐng)求是冪等的,這意味著多次調(diào)用它不會(huì)改變結(jié)果。
GET請(qǐng)求永遠(yuǎn)不應(yīng)該改變數(shù)據(jù)。它們只用于檢索。
2.向后兼容性和版本控制
在修改端點(diǎn)時(shí),保持向后兼容性非常重要。這意味著確保更改不會(huì)破壞現(xiàn)有客戶端。
版本控制: 引入版本(比如**/v2/products**)是處理重大更改的常見做法。
在GraphQL的情況下,添加新字段(v2字段)而不刪除舊字段有助于在不破壞現(xiàn)有客戶端的情況下發(fā)展API。
3.速率限制和CORS
另一個(gè)最佳實(shí)踐是設(shè)置速率限制。這用于控制用戶在一定時(shí)間內(nèi)可以發(fā)起的請(qǐng)求次數(shù)。這對(duì)于維護(hù)API的可靠性和可用性至關(guān)重要。它還防止API受到DDoS攻擊。
通常做法還包括設(shè)置CORS設(shè)置(跨域資源共享)。CORS設(shè)置對(duì)于Web安全至關(guān)重要。它們控制哪些域可以訪問您的API,防止不希望的跨站點(diǎn)交互。
網(wǎng)站名稱:API設(shè)計(jì):從基礎(chǔ)到優(yōu)秀實(shí)踐
轉(zhuǎn)載來(lái)于:http://m.5511xx.com/article/djcssij.html


咨詢
建站咨詢
