RestFul Api 設計 之 URL
全文來自阮一峰部落格文章
參考:
1、動詞 + 賓語
RESTful 的核心思想就是,客戶端發出的資料操作指令都是"動詞 + 賓語"的結構。比如,GET /articles這個命令,GET是動詞,/articles是賓語。
動詞通常就是五種 HTTP 方法,對應 CRUD 操作。
- GET:讀取(Read)
- POST:新建(Create)
- PUT:更新(Update)
- PATCH:更新(Update),通常是部分更新
- DELETE:刪除(Delete) 根據 HTTP 規範,動詞一律大寫。
2、動詞的覆蓋
有些客戶端只能使用GET和POST這兩種方法。伺服器必須接受POST模擬其他三個方法(PUT、PATCH、DELETE)。
這時,客戶端發出的 HTTP 請求,要加上X-HTTP-Method-Override屬性,告訴伺服器應該使用哪一個動詞,覆蓋POST方法。
POST /api/Person/4 HTTP/1.1
X-HTTP-Method-Override: PUT
上面程式碼中,X-HTTP-Method-Override指定本次請求的方法是PUT,而不是POST。
3、賓語是名詞
賓語就是 API 的 URL,是 HTTP 動詞作用的物件。它應該是名詞,不能是動詞。比如,/articles這個 URL 就是正確的,而下面的 URL 不是名詞,所以都是錯誤的。
- /getAllCars
- /createNewCar
- /deleteAllRedCars
4、複數URL
既然 URL 是名詞,那麼應該使用複數,還是單數?
這沒有統一的規定,但是常見的操作是讀取一個集合,比如GET /articles(讀取所有文章),這裡明顯應該是複數。
為了統一起見,建議都使用複數 URL,比如GET /articles/2要好於GET /article/2
5、避免多級URL
常見的情況是,資源需要多級分類,因此很容易寫出多級的 URL,比如獲取某個作者的某一類文章。
GET /authors/12/categories/2
這種 URL 不利於擴充套件,語義也不明確,往往要想一會,才能明白含義。
更好的做法是,除了第一級,其他級別都用查詢字串表達。
GET /authors/12?categories=2
下面是另一個例子,查詢已釋出的文章。你可能會設計成下面的 URL。
GET /articles/published
查詢字串的寫法明顯更好。
GET /articles?published=true
6、包含版本號的URL設計
一個設計誤區,就是在URI中加入版本號:
http://www.example.com/app/1.0/foo
http://www.example.com/app/1.1/foo
http://www.example.com/app/2.0/foo
因為不同的版本,可以理解成同一種資源的不同表現形式,所以應該採用同一個URI。版本號可以在HTTP請求頭資訊的Accept欄位中進行區分(參見Versioning REST Services):
Accept: vnd.example-com.foo+json; version=1.0
Accept: vnd.example-com.foo+json; version=1.1
Accept: vnd.example-com.foo+json; version=2.0
相關文章
- restful api設計指南RESTAPI
- 理解RESTful Api設計RESTAPI
- RESTful API 設計指南RESTAPI
- RESTFUL API 安全設計指南RESTAPI
- RESTful API 設計規範RESTAPI
- RESTful API 設計指南【轉】RESTAPI
- Restful API 的設計規範RESTAPI
- 如何更好的設計 RESTful APIRESTAPI
- 如何更好的設計RESTful APIRESTAPI
- API介面設計之RESTful軟體架構風格APIREST架構
- 好RESTful API的設計原則RESTAPI
- GitHub 的 Restful HTTP API 設計分解GithubRESTHTTPAPI
- RESTful API 設計思路及實踐RESTAPI
- RESTful API 設計指南——最佳實踐RESTAPI
- 關於 RESTful API 設計的總結RESTAPI
- Django RESTful API設計與實踐指南DjangoRESTAPI
- 跟著 Github 學習 Restful HTTP API 設計GithubRESTHTTPAPI
- 關於restful 查詢API設計問題RESTAPI
- 從英文變形規則計算到Restful Api設計RESTAPI
- 討論下 RESTful 風格 API 的路由設計RESTAPI路由
- RESTful & “優雅的”API 響應結構設計RESTAPI
- restful api設計中的冪等性的理解。RESTAPI
- Yii2.0 RESTful API 之版本控制RESTAPI
- Yii2.0 RESTful API 之速率限制RESTAPI
- 理解RESTful APIRESTAPI
- 10-django——RESTful API 之序列化DjangoRESTAPI
- RESTful Api 身份認證中的安全性設計探討RESTAPI
- restful鑑權白名單匹配urlREST
- RESTful風格APIRESTAPI
- Java網路程式設計之使用URL類Java程式設計
- 綜合Twitter、Github等各大網站API設計經驗:RESTful API實用設計與最佳實踐 - Vinay SahniGithub網站APIREST
- URL程式設計程式設計
- Go實戰 21 | 網路程式設計:玩轉 RESTful API 服務Go程式設計RESTAPI
- 無需程式設計,通過配置零程式碼生成CRUD RESTful API程式設計RESTAPI
- restful api最佳實踐RESTAPI
- RESTful API 最佳實踐RESTAPI
- RESTful API 編寫指南RESTAPI
- Swagger 文件工具 設計、構建、文件化和使用您的 RESTful APISwaggerRESTAPI