REST的幾個常見錯誤

2021-07-22 17:29:03 字數 2283 閱讀 9320

過去幾年我的工作和學習一直圍繞restful api,我在不同的專案和社群中見過很多相同的錯誤,於是我就決定,將我在網上讀到的和我自身的經驗整理一下。下面這些,是常見的一些設計錯誤、解釋以及例子。

你的uri沒有反應相應資源的用途。

restful的api是基於資源的,當我們設計uri的時候,要時刻銘記我們應該通過uri正確反映資源,要讓使用者一看到uri,就能明白這是什麼資源,是什麼地方的,它的標誌符是什麼,它有什麼可選項。

比如說,我們有種資源叫「account」,我們現在要關閉這個賬戶,那麼相應的uri應該設計成什麼呢?

下面分別是錯誤的和正確的例子,你認為哪乙個更合理?

錯誤的:

正確的:

錯誤的用法沒有給出uri的具體資訊,也許我們需要在請求中加入一些查詢的變數或主體,但是光從名字來看,並不能看到查詢的引數,或需要的主體。

正確的用法明確地表達出「account」 4402278可以被關閉,從uri我們就可以推斷出這一點。

http的方法必須根據請求意圖的不同正確使用。例如,如果你要返回資訊,就必須使用get方法。

下面就是一些動作的型別和相應的http方法:

話雖如此,下面這種錯誤時常發生:

錯誤:

正確:

錯誤的例子企圖在「accounts」上使用post方法,通過在uri標註id刪除乙個賬戶。

雖然這樣做也可以達到目的,但卻是不恰當的。應為http提供了明確的方法來刪除資源,即delete。

還有很多錯誤的例子,展開說又可以寫一篇文章了,在這裡只是簡單提一下。

無論你對相同的資源呼叫多少次get,返回的資訊應該不變。

那麼delete方法呢?如果你刪除/accounts/4402278兩次會發生什麼?

如果你的api返回200(ok)或500(內部伺服器錯誤),就違背了返回狀態碼的原則。

狀態碼的目的是給使用者對請求狀態的總體判斷。

這意味著,我們應該慎重選擇代表狀態的狀態碼,它需要準確反應最後結果的狀態。

錯誤的:

正確的:

如果你需要get乙個如例子所示的資源,但是沒有相應的記錄,那麼應該返回404,因為這是not found。如果反悔200(ok)然後在body中說「not found」,這是不合適的。這種做法非常多餘。

狀態碼也能幫助你的api更清楚地描述狀態。在很多情況下,使用者只處理狀態碼就能知道發生了什麼,這比處理大型字串更加簡單。

下面是最常用的一些狀態碼。

忽略快取很簡單,只要在api呼叫的頭部加入」cache-control: no-cache」就可以了。

http定義了很多強大的快取機制,包括etag,if-modified-since header,和304 not modified返回碼。

這可以讓你的客戶端和伺服器能通過快取或**保持乙份資源的副本,來提高應用的擴充套件性和效能。

如果你的呼叫傳送的描述不包含任何鏈結,那麼你就打破了rest的hateoas原則。

超連結的概念指的是一些鏈結資源,可以讓應用通過鏈結在不同的狀態之間跳轉。

如果你忽略了超連結,就意味著uri必須在客戶端通過很難的程式設計原理實現。

在下面的例子中,我們有乙個叫做「accounts」的資源,一共有一百條。

,,,

]}]}

如果現在賬戶出現了異常,使用者只能進行其中一些操作,那麼api應該如下部署:

]}]

}

如果你的api返回的資源只有一種單一的表示形式,那麼可能你服務的客戶端很少,而且都能理解這種形式。

如果你未來想要支援更多客戶端,那麼應該使用http內容協商。

它可以讓你指定特定的資源型別,如xml,json或yaml。

當你設計api的時候……

我希望這篇文章能讓你了解一下常見的錯誤,並且在你設計api的時候設法避免他們。

2023年9月22日-23日,[sdcc 2016大資料技術&架構實戰峰會]( /)將在杭州舉行,兩場峰會大牛講師來自阿里、京東、蘇寧、唯品會、美團點評、游族、餓了麼、有讚、echo等知名網際網路公司,共同**海量資料下的應用監控系統建設、異常檢測的演算法和實現、大資料基礎架構實踐、敏捷型資料平台的構建及應用、音訊分析的機器學習演算法應用,以及高可用/高併發/高效能系統架構設計、電商架構、分布式架構等話題與技術。

9月5日~18日是八折優惠票價階段,5人以上**或者購買兩場峰會通票更有特惠,限時折扣,預購從速。(票務詳情鏈結)。

幾個常見的雲配置錯誤

毫無疑問,雲計算可以改善安全性的某些方面。畢竟,雲計算具有巨大的規模經濟,可為客戶提供專用的安全團隊和技術,而這對於絕大多數組織而言都是不可行的。當客戶沒有在雲計算環境中正確配置和保護自己的工作負載和儲存桶時,就會發生壞訊息。保證資料在雲中安全是企業與雲計算 產商共同的責任。而雲計算安全措施是雲計算...

SSIS中常見的幾個錯誤

出現這個錯誤的原因是因為合併連線的連線鍵的資料型別不同。解決辦法是在寫指令碼的時候將一方的資料型別轉換為與另乙個連線同一型別的資料 出現這個錯誤的原因是因為專案執行環境的原因。解決方案是在專案右擊選單 專案 屬性 或 屬性 除錯 在 除錯 頁上設定 run64bitruntime 屬性的值為 fal...

簡單舉幾個CodeReview的常見錯誤

簡單舉幾個codereview的常見錯誤 今天給公司某個專案做個codereview,用findbugs預設配置規則跑了下,發現了幾個問題,都是平時coding時稍微注意下,就能避免這樣的不適。1 空指標引用 load of known null value priority medium conf...