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
相關文章
- Jersey 開發RESTful(七)Jersey快速入門REST
- yii2 restful web服務快速入門RESTWeb
- MongoDB 入門教程系列之三:使用 Restful API 操作 MongoDBMongoDBRESTAPI
- Spring Boot入門系列(二十)快速打造Restful API 介面Spring BootRESTAPI
- [beego新手入門]基於web框架-beego的RESTful API的構建之旅GoWeb框架RESTAPI
- MongoDB最簡單的入門教程之五-通過Restful API訪問MongoDBMongoDBRESTAPI
- 入門入門入門 MySQL命名行MySql
- 入門微信小程式(含實戰) [第七篇] --- 伺服器端介面restful配置微信小程式伺服器REST
- 如何入CTF的“門”?——所謂入門就是入門
- 何入CTF的“門”?——所謂入門就是入門
- restfulREST
- scala 從入門到入門+
- makefile從入門到入門
- ACM入門之新手入門ACM
- 【小入門】react極簡入門React
- gRPC(二)入門:Protobuf入門RPC
- 《Flutter 入門經典》之“Flutter 入門 ”Flutter
- 新手入門,webpack入門詳細教程Web
- Android入門教程 | RecyclerView使用入門AndroidView
- linux新手入門――shell入門(轉)Linux
- Restful是什麼,SOAP Webservice和RESTful WebserviceRESTWeb
- MyBatis從入門到精通(一):MyBatis入門MyBatis
- SqlSugar ORM 入門到精通【一】入門篇SqlSugarORM
- Storm入門指南第二章 入門ORM
- VUE入門Vue
- MyBatis 入門MyBatis
- CSS 入門CSS
- JavaScript 入門JavaScript
- Nginx 入門Nginx
- RabbitMQ入門MQ
- GitHub入門Github
- Redis 入門Redis
- PostgreSQL 入門SQL
- Prometheus 入門Prometheus
- VuePress 入門Vue
- Tableau入門
- WebSocket 入門Web
- Webpack 入門Web