【正文】
返回 car 911的所有司機GET /cars/911/drivers/8 返回 car 911的8號司機HTTP動詞(HTTP Verbs)對于資源的具體操作類型,由HTTP動詞表示。常用的HTTP動詞有下面五個:? GET(SELECT):從服務器取出資源(一項或多項)。? POST(CREATE):在服務器新建一個資源。? PUT(UPDATE):在服務器更新資源(客戶端提供改變后的完整資源)。? PATCH(UPDATE):在服務器更新資源(客戶端提供改變的屬性)。? DELETE(DELETE):從服務器刪除資源。還有兩個不常用的HTTP動詞。? HEAD:獲取資源的元數(shù)據(jù)。? OPTIONS:獲取信息,關(guān)于資源的哪些屬性是客戶端可以改變的。注:Get方法和查詢參數(shù)不應該涉及狀態(tài)改變。使用PUT, POST 和DELETE方法而不是 GET 方法來改變狀態(tài)。過濾信息(Filtering)如果記錄數(shù)量很多,服務器不可能都將它們返回給用戶。API應該提供參數(shù),過濾返回結(jié)果。為集合提供過濾、排序、選擇和分頁等功能。下面是一些常見的參數(shù)。? ?limit=10:指定返回記錄的數(shù)量? ?offset=10:指定返回記錄的開始位置。? ?pageNumber=2amp。perSize=100:指定第幾頁,以及每頁的記錄數(shù)。? ?sortby=nameamp。order=asc:指定返回結(jié)果按照哪個屬性排序,以及排序順序。? ?animal_type_id=1:指定篩選條件參數(shù)的設(shè)計允許存在冗余,即允許API路徑和URL參數(shù)偶爾有重復。比如,GET /zoo/ID/animals 與 GET /animals?zoo_id=ID 的含義是相同的注:①移動端能夠顯示其中一些字段,它們其實不需要一個資源的所有字段,給API消費者一個選擇字段的能力,這會降低網(wǎng)絡流量,提高API可用性。②為了將總數(shù)發(fā)給客戶端,使用訂制的HTTP頭: XTotalCount.狀態(tài)碼(Status Codes)服務器向用戶返回的狀態(tài)碼和提示信息,常見的有以下一些(方括號中是該狀態(tài)碼對應的HTTP動詞)。? 200 OK [GET]:服務器成功返回用戶請求的數(shù)據(jù),該操作是冪等的(Idempotent)。? 201 CREATED [POST/PUT/PATCH]:用戶新建或修改數(shù)據(jù)成功。? 202 Accepted [*]:表示一個請求已經(jīng)進入后臺排隊(異步任務)? 204 NO CONTENT [DELETE]:用戶刪除數(shù)據(jù)成功。? 400 INVALID REQUEST [POST/PUT/PATCH]:用戶發(fā)出的請求有錯誤,服務器沒有進行新建或修改數(shù)據(jù)的操作,該操作是冪等的。? 401 Unauthorized [*]:表示用戶沒有權(quán)限(令牌、用戶名、密碼錯誤)。? 403 Forbidden [*]:表示用戶得到授權(quán)(與401錯誤相對),但是訪問是被禁止的。? 404 NOT FOUND [*]:用戶發(fā)出的請求針對的是不存在的記錄,服務器沒有進行操作,該操作是冪等的。? 406 Not Acceptable [GET]:用戶請求的格式不可得(比如用戶請求JSON格式,但是只有XML格式)。? 410 Gone [GET]:用戶請求的資源被永久刪除,且不會再得到的。? 422 Unprocesable entity [POST/PUT/PATCH]:當創(chuàng)建一個對象時,發(fā)生一個驗證錯誤。? 500 INTERNAL SERVER ERROR [*]:服務器發(fā)生錯誤,用戶將無法判斷發(fā)出的請求是否成功。錯誤處理(Error handling)如果狀態(tài)碼是4xx,就應該向用戶返回出錯信息。盡量使用詳細的錯誤包裝信息:{ errors: [ { userMessage: Sorry, the requested resource does not exist, internalMessage: No car found in the database, code: 4xx, more info: } ]}返回結(jié)果(Response)服務器返回的數(shù)據(jù)格式,應該盡量使用JSON,避免使用XML。針對不同操作,服務器向用戶返回的結(jié)果應該符合以下規(guī)范。? GET /collection:返回資源對象的列表(數(shù)組)? GET /collection/resource:返回單個資源對象? POST /collection:返回新生成的資源對象? PUT /collection/resource:返回完整的資源對象? PATCH /coll