RESTful入門
RESTful入門
1. REST簡介
和RPC一樣,都是目前比較主流的URL連結風格,也可以說是web服務的一種架構風格。REST全稱Representational State Transfer,表現層狀態轉移。用一句話簡單的概括就是URL定位資源,用HTTP動詞(GET,POST,DELETE,PUT)描述操作。其實它真正的全稱是Resource Representational State Transfer,看字面意思就是資源在網路中以某種表現形式進行狀態轉移。我們分開來解讀:
- Resources:資源,即資料,比如friends,books等;
- Representational :某種表現形式,比如用json,xml,jpg等;
- State Transfer:狀態變化,通過HTTP動詞實現。
符合rest型別的結構就是Restful。
舉個簡單的例子:
非REST的url:http://...../queryItems.action?id=001&type=T01
REST的url風格:http://..../items/001
再比如:
http://api.qc.com/v1/newsfeed: 某人的新鮮事;
http://api.qc.com/v1/friends: 某人的好友列表;
http://api.qc.com/v1/profile: 某人的詳細資訊;
然後用HTTP協議裡的動詞來實現資源的新增,修改,刪除等操作。即通過HTTP動詞來實現資源的狀態扭轉:
GET http://api.qc.com/v1/friends: 獲取某人的全部好友列表;
GET http://api.qc.com/v1/friends/{id}: 獲取某人的指定好友;
POST http://api.qc.com/v1/friends: 新增好友;
DELETE http://api.qc.com/v1/friends/{id}: 根據id刪除好友;
PUT http://api.qc.com/v1/friends/{id}: 根據id更新好友;
禁止使用類似這樣的URL:http://api.qc.com/v1/deleteFriend
2. 為什麼用Restful
為了通過統一的介面為web,Android,IOS提供服務,對於微博開放平臺,微信公共平臺等,他們不需要有顯式的前端,只需要一套提供服務的介面,也是Restful是它們最好的選擇。
3. 如何設計
3.1 URL使用名詞而不是動詞,且推薦用複數
在restful架構中,每個URL代表一種資源,所以網址中不能有動詞,只能有名詞。
反例:
/getBooks
/addBook
/updateBook
/deleteBook?id=10
正例:
GET /books
POST /books
PUT /books/{id}
DELETE /books/{id}
3.2 保證head和get方法是安全的
head和get方法不會對資源的狀態有所改變(汙染),比如嚴格杜絕如下情況:
GET /deleteBook?id=10
GET、HEAD和OPTIONS均被認為是安全的方法,而PUT、POST、DELETE等請求都是不安全的(會修改資料 )。
3.3 資源的地址推薦用巢狀結構
比如:
GET /books/1003/catalog
3.4 使用正確的HTTP Status Code表示訪問狀態
HTTP狀態可以參考:https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html。
3.5 使用HTTPS協議
API與使用者的通訊協議總是使用HTTPS協議。
3.6 專有域名
應該儘量將API部署在專用域名之下。
https://api.example.com
如果確定API很簡單,不會有進一步擴充套件,可以考慮放在主域名下。
https://example.org/api/
參考:
http://www.ruanyifeng.com/blog/2014/05/restful_api.html
http://www.ruanyifeng.com/blog/2011/09/restful.html
https://blog.csdn.net/chenxiaochan/article/details/73716617
https://www.zhihu.com/question/28557115?utm_source=wechat_search&utm_medium=organic
相關文章
- yii2 restful web服務快速入門RESTWeb
- Spring Boot入門系列(二十)快速打造Restful API 介面Spring BootRESTAPI
- MongoDB 入門教程系列之三:使用 Restful API 操作 MongoDBMongoDBRESTAPI
- [beego新手入門]基於web框架-beego的RESTful API的構建之旅GoWeb框架RESTAPI
- MongoDB最簡單的入門教程之五-通過Restful API訪問MongoDBMongoDBRESTAPI
- 入門入門入門 MySQL命名行MySql
- 何入CTF的“門”?——所謂入門就是入門
- 如何入CTF的“門”?——所謂入門就是入門
- scala 從入門到入門+
- makefile從入門到入門
- gRPC(二)入門:Protobuf入門RPC
- 【小入門】react極簡入門React
- Android入門教程 | RecyclerView使用入門AndroidView
- Spring Boot入門系列(二十一)如何優雅的設計 Restful API 介面版本號,實現 API 版本控制!Spring BootRESTAPI
- 新手入門,webpack入門詳細教程Web
- Android入門教程 | Kotlin協程入門AndroidKotlin
- 《Flutter 入門經典》之“Flutter 入門 ”Flutter
- laravel5.6 RESTful API系列之整合github登入認證!LaravelRESTAPIGithub
- MyBatis從入門到精通(一):MyBatis入門MyBatis
- 理解RESTful概念REST
- Restful 筆記REST筆記
- HTTP&RestFULHTTPREST
- 理解RESTful APIRESTAPI
- SpringMVC:RESTful案例SpringMVCREST
- Tableau入門
- angular入門Angular
- lodash入門
- Webpack 入門Web
- golang 入門Golang
- lapis入門API
- MarkDown入門
- JSP入門JS
- UML入門
- VuePress 入門Vue
- RSA入門
- jQuery入門jQuery
- Hive 入門Hive
- scrapy入門