API接口設計,rest,soap

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

最多的是app接口

 

 

 

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請求的資源路由

相關文章
相關標籤/搜索