總是使用TLS(就是https)來(lái)訪問(wèn)API,沒(méi)有必要指出什么時(shí)候需要用,什么時(shí)候不需要用,只管任何時(shí)候都用它就好。
對(duì)所有非TLS的請(qǐng)求返回403 Forbidden,不要用重定向,這會(huì)允許一些不良的客戶端行為,而又沒(méi)有任何好處。依賴重定向的客戶端會(huì)使流量翻倍,而讓TLS毫無(wú)意義 —— 敏感數(shù)據(jù)已經(jīng)在第一次請(qǐng)求時(shí)發(fā)送出來(lái)了。
從一開始就為API分配版本。使用Accepts頭來(lái)發(fā)送版本信息,可以使用自定義的內(nèi)容類型,如:
Accept: application/vnd.heroku+json; version=3
不要提供默認(rèn)版本,而由客戶端顯式指定它使用哪一個(gè)特定的版本。
在所有的請(qǐng)求中帶上 ETag 頭 , 用于識(shí)別特定版本的返回資源。用戶可以在隨后的請(qǐng)求中通過(guò)提供If-None-Match頭的值來(lái)檢查內(nèi)容是否過(guò)期。
在每個(gè)API相應(yīng)中提供Request-Id頭,帶上一個(gè)唯一的UUID值。如果服務(wù)器和客戶端都記錄了這些值,在跟蹤和調(diào)試請(qǐng)求時(shí)會(huì)派上大用場(chǎng)。
對(duì)所有可能產(chǎn)生大量數(shù)據(jù)的響應(yīng)進(jìn)行分頁(yè)。使用Content-Range 頭來(lái)標(biāo)記分頁(yè)請(qǐng)求。可以參考這個(gè)例子,來(lái)了解請(qǐng)求和響應(yīng)頭、狀態(tài)碼、Limit、排序和翻頁(yè):Heroku Platform API on Ranges
更多建議: