自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

5招助您設(shè)計(jì)出更好的REST API

譯文
網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
本文將從SDK與文檔的使用,向后兼容性的保持,處置升級,有效地開展測試這五個(gè)方面,與您討論REST API設(shè)計(jì)的各項(xiàng)實(shí)踐。

[[333102]]

【51CTO.com快譯】本文將從SDK與文檔的使用,向后兼容性的保持,處置升級,有效地開展測試這五個(gè)方面,與您討論REST API設(shè)計(jì)的各項(xiàng)實(shí)踐。

毋庸置疑,API已成為了當(dāng)前在不同系統(tǒng)之間交換信息的實(shí)際標(biāo)準(zhǔn)。它往往能夠有助于更好地集成某個(gè)系統(tǒng)內(nèi)部各種組件。那么怎樣才能設(shè)計(jì)出更好的API呢?在本文中,我將和您討論在進(jìn)行多種REST API設(shè)計(jì)和實(shí)現(xiàn)時(shí),那些值得遵循的良好實(shí)踐原則。

1.善用各種客戶端SDK,而無需自行編寫代碼

如果服務(wù)提供商或創(chuàng)建者已經(jīng)給出了一套開發(fā)工具包(SDK),那么我們就應(yīng)該在API調(diào)用中使用它們,而無需在本機(jī)REST調(diào)用之上,去重新編寫自己的客戶端庫。此方面的一個(gè)最好例子便是與Amazon Web Services交互的AWS SDK。選擇使用AWS SDK,不但有助于減緩的團(tuán)隊(duì)學(xué)習(xí)曲線、快速上手,而且能夠節(jié)省編寫有關(guān)安全性、網(wǎng)絡(luò)超時(shí)、重試、回退等邏輯事務(wù)處理的時(shí)間。

此外,由于這些SDK由提供商所維護(hù),因此開發(fā)人員無需進(jìn)行繁瑣的測試、修復(fù)和更改,即可支持各種新的API節(jié)點(diǎn)。如今,大多數(shù)SDK不但開源,并且能夠支持和快速集成包括REST、WebSocket、以及gRPC在內(nèi)的各種標(biāo)準(zhǔn)協(xié)議。

不過,API SDK的主要缺點(diǎn)是:可用性,以及對您所選編程語言的支持程度。針對此類狀況,開發(fā)人員有時(shí)需要開發(fā)自定義的REST客戶端。在此,我的經(jīng)驗(yàn)是:開發(fā)人員應(yīng)將其設(shè)計(jì)和實(shí)現(xiàn)作為一個(gè)單獨(dú)的Maven項(xiàng)目,托管到企業(yè)Git存儲庫中,并配上充分的文檔記錄,以供組織中的所有內(nèi)部團(tuán)隊(duì)共享使用。

2.巧用文檔

上文提到的配套文檔,不但對API開發(fā)人員,尤其是那些沒有任何開發(fā)背景的人員而言,是著手開發(fā)的基本要素,而且文檔往往也是絕大多數(shù)現(xiàn)代化開發(fā)框架的一個(gè)不可或缺的部分。作為開發(fā)人員的我,經(jīng)??梢愿鶕?jù)現(xiàn)有的文檔,來輕松地執(zhí)行與API相關(guān)的各項(xiàng)測試,而不必臨時(shí)到浩如煙海的社區(qū)或論壇上,去搜索相關(guān)資料。通常,API的相關(guān)文檔能夠向使用者介紹API的基本功能、各種參數(shù)、以及預(yù)期的負(fù)載(payload)模型。

當(dāng)然,我在參與各種項(xiàng)目中也發(fā)現(xiàn),有些文檔雖然包含了詳盡的內(nèi)容(包括負(fù)載模型的范例),但是其中有些已經(jīng)滯后于API的當(dāng)前版本。因此,我在項(xiàng)目中往往會使用Swagger將文件的方法、參數(shù)和模型緊密地集成到服務(wù)器端的代碼之中,讓客戶端和文件系統(tǒng)的服務(wù)器以同樣的速度來更新與同步。

3.遵循標(biāo)準(zhǔn)的端點(diǎn)方法

在設(shè)計(jì)API時(shí),許多開發(fā)人員不但容易忽略端點(diǎn)的標(biāo)準(zhǔn)命名法則,而且并未按照HTTP的各種動詞定義進(jìn)行操作。關(guān)于此方面的資料,網(wǎng)上有許多,只要你愿意花時(shí)間搜,一定能找到不少。下面,我分享一下自己一直嚴(yán)格遵守,同時(shí)也要求部門內(nèi)開發(fā)人員持續(xù)遵循的幾種方法:

  • 不要在端點(diǎn)中混合使用大、小寫字母。例如:請將“/users/userId”更改為“/users/{id}”。請把POST“/deleteUser/userId”代替為DELETE“users/{id}”。
  • 始終在URL中使用版本控制,例如:我會將“/api/v1/”作為URL的必要組成部分。
  • 將“https”作為客戶端連接的默認(rèn)選項(xiàng)。
  • 請將負(fù)載驗(yàn)證組件作為代碼處置的第一步。千萬不可將其留到后期處理,甚至是留給異常捕獲程序去處理。

4.處置升級

我曾經(jīng)遇到過這樣的一個(gè)案例:我們的某項(xiàng)服務(wù)一直使用著某個(gè)API來傳遞一些數(shù)據(jù),但是某天它突然不工作了。在經(jīng)過了多輪電子郵件和電話會議的討論與研究后,我們最終才發(fā)現(xiàn)是因?yàn)樵揂PI的負(fù)載發(fā)生了變化--增加了一個(gè)必填字段。然而,我們在對該API的升級過程中,沒有考慮到向后兼容這個(gè)問題!

為了避免此類錯(cuò)誤,我們應(yīng)當(dāng)使用現(xiàn)有的CI(持續(xù)集成)流程,以盡早地檢測出來。而作為一名API開發(fā)人員,您在更改目標(biāo)API的時(shí)候,應(yīng)該充分考慮現(xiàn)有的客戶端。例如:在請求的正文中,那些新的字段,是應(yīng)該使用默認(rèn)值呢?還是應(yīng)該定義一個(gè)諸如“/api/v2”之類的新版本端點(diǎn)?

5.測試

此處說所的測試,不只是功能性測試,也包括負(fù)載測試。您應(yīng)該能夠獲悉目標(biāo)服務(wù)器每分鐘通??梢蕴幚矶嗌賯€(gè)API調(diào)用,以及在網(wǎng)絡(luò)延遲增加時(shí),響應(yīng)時(shí)間會產(chǎn)生何種變化。如今,更多的企業(yè)會在全球范圍內(nèi)部署不同規(guī)模的數(shù)據(jù)中心,或是采用多區(qū)域的云端環(huán)境。例如:我們有必要了解到,您在美國西部托管的API服務(wù)器,是否能夠給那些來自美國東部、歐洲、澳洲、甚至是亞洲的客戶端實(shí)例請求,提供足夠的帶寬和連接數(shù)。

就我的個(gè)人經(jīng)驗(yàn)而言,我更喜歡使用諸如:Postman或Apache JMeter之類的API測試工具,而不是從零開始編寫工具與用例。它們不僅能夠?yàn)槲夜?jié)省時(shí)間,還能夠方便我輕松地check-in到git,并且導(dǎo)出各種模板。

總結(jié)

上述五點(diǎn)經(jīng)驗(yàn),便是我在實(shí)際項(xiàng)目中有關(guān)設(shè)計(jì)REST API的個(gè)人總結(jié)。希望它們能夠?yàn)槟腁PI開發(fā),以及軟件工程的其他方面,帶來一些啟發(fā),讓你少走一些彎路。

【原標(biāo)題】5 Tips for Better REST API Design

 作者: Preetdeep Kumar

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

 

責(zé)任編輯:武曉燕 來源: 51CTO
相關(guān)推薦

2016-12-30 14:47:21

設(shè)計(jì)RESTfulAPI

2022-02-10 23:38:23

API架構(gòu)設(shè)計(jì)

2024-06-24 00:20:00

API應(yīng)用程序接口

2023-09-21 11:20:46

2023-10-30 18:59:38

REST API開發(fā)

2022-06-21 09:27:01

PythonFlaskREST API

2024-10-15 09:34:57

2020-04-22 09:00:00

REST API參數(shù)化前端

2018-04-20 09:00:47

UI設(shè)計(jì)應(yīng)用程序易用性

2011-12-12 15:51:20

RESTSOAP

2012-06-27 09:47:05

ibmdw

2024-01-23 09:08:47

軟件架構(gòu)REST

2010-01-08 12:03:42

ibmdwREST

2019-11-13 11:52:46

區(qū)塊鏈API比特幣

2022-08-05 14:46:28

區(qū)塊鏈Web 3.0NFT

2023-08-14 09:00:00

APIgRPCREST

2011-10-27 16:24:48

API

2022-07-06 14:51:07

人工智能技術(shù)研究

2023-02-03 17:29:46

2022-05-06 09:52:17

REST接口API
點(diǎn)贊
收藏

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