REST以前的重要協議SOAPhtml
rest(簡單理解風格、約束、設計理念)mysql
rest以前是SOAP:SOAP Web API採用RPC風格,它採用面向功能的架構,因此咱們在設計SOAP Web API的時候首相考慮的是應高提供怎樣的功能(或者操做)。RESTful Web API採用面向資源的架構,因此在設計之初首先須要考慮的是有哪些資源可供操做jquery
SOAP一般以xml描述數據而rest提倡json描述數據(xml和json都是通用格式的與語言無關,能夠在不一樣的語言中互通)git
RESTFul API基於REST 的api設計理念 (輕,一般用json描述數據,無狀態)github
基於資源,增刪改查只是對於資源狀態的改變web
使用http動詞(GET:查詢、POST:建立、PUT:更新、DELETE:刪除)來操做資源 redis
查詢get:/movie/:mid 不符合rest規範的:/getmovie/:midsql
tp5.0支持設置RESTFul
請求的資源路由json
Route::resource('blog','index/blog');
或者在路由配置文件中使用__rest__
添加資源路由定義:api
return [ // 定義資源路由 '__rest__'=>[ // 指向index模塊的blog控制器 'blog'=>'index/blog', ], // 定義普通路由 'hello/:id'=>'index/hello', ]
設置後會自動註冊7個路由規則,以下:
標識 | 請求類型 | 生成路由規則 | 對應操做方法(默認) |
---|---|---|---|
index | GET | blog |
index |
create | GET | blog/create |
create |
save | POST | blog |
save |
read | GET | blog/:id |
read |
edit | GET | blog/:id/edit |
edit |
update | PUT | blog/:id |
update |
delete | DELETE | blog/:id |
delete |
具體指向的控制器由路由地址決定,例如上面的設置,會對應index模塊的blog控制器,你只須要爲Blog控制器建立以上對應的操做方法就能夠支持下面的URL訪問:
http://serverName/blog/ index http://serverName/blog/128 read http://serverName/blog/28/edit edit
對每一個http請求的響應結果都指明一個特別的狀態碼(200、20一、20二、400、40一、40三、40四、500、...)
如:403:當A用戶請求了B用戶的id號那麼判斷越權返回403
錯誤碼:自定義的錯誤id號
統一描述錯誤:錯誤碼、錯誤信息、當前url
使用Token令牌來受權和驗證身份(這裏不用cookie)
版本控制
測試與生產環境分開:api/xxx.com <-------> dev.api.xxx.com
url語義要明確,最好能夠望文知義
最好有一份比較標準的文檔
參考豆瓣開放API 和github開發者API
不要盲目照搬rest標準哦
接口安全、接口認證、接口性能、接口控流、接口緩存設計(緩存過時策略、緩存命中、緩存優化)
可能問題:
接口請求地址和參數暴露
重要接口返回的數據明文暴露
app登陸態請求的數據安全性問題
代碼層的數據安全問題
解決辦法:
基本參數放入header
每次http請求都攜帶 受權碼sign
受權碼sign 有效性(客戶端攜帶時間與數據一塊兒生成sign,訪問服務端時解密sign的時間)
受權碼sign惟一性保證(存入mysql、文件、redis)
請求參數、返回數據 按照安全性適當加密 (加密方式:md5 AES(推薦) RSA)
access_token
json的轉化;
1、JSON字符串轉換爲JSON對象
var obj = eval('(' + str + ')');//由JSON字符串轉換爲JSON對象 //或者 var obj = str.parseJSON(); //由JSON字符串轉換爲JSON對象 //或者 var obj = JSON.parse(str); //由JSON字符串轉換爲JSON對象 //或者 var obj = $.parseJSON(str); //由jquery將JSON字符串轉換爲JSON對象
2、將JSON對象轉化爲JSON字符串
var last=obj.toJSONString(); //將JSON對象轉化爲JSON字符 //或者 var last=JSON.stringify(obj); //將JSON對象轉化爲JSON字符
5.0支持設置RESTFul
請求的資源路由