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请求的资源路由

相关文章
相关标签/搜索