API接口设计,rest,soap
REST之前的重要协议SOAP
rest(简单理解风格、约束、设计理念)
rest之前是SOAP:SOAP Web API采用RPC风格,它采用面向功能的架构,所以我们在设计SOAP Web API的时候首相考虑的是应高提供怎样的功能(或者操作)。RESTful Web API采用面向资源的架构,所以在设计之初首先需要考虑的是有哪些资源可供操作
SOAP通常以xml描述数据而rest提倡json描述数据(xml和json都是通用格式的与语言无关,可以在不同的语言中互通)
RESTFul API基于REST 的api设计理念 (轻,通常用json描述数据,无状态)
基于资源,增删改查只是对于资源状态的改变
使用http动词(GET:查询、POST:创建、PUT:更新、DELETE:删除)来操作资源
查询get:/movie/:mid 不符合rest规范的:/getmovie/:mid
tp5.0支持设置RESTFul请求的资源路由
Route::resource('blog','index/blog');
或者在路由配置文件中使用__rest__添加资源路由定义:
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、201、202、400、401、403、404、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的转化;
一、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对象
二、将JSON对象转化为JSON字符串
var last=obj.toJSONString(); //将JSON对象转化为JSON字符 //或者
var last=JSON.stringify(obj); //将JSON对象转化为JSON字符
5.0支持设置RESTFul请求的资源路由
API接口设计,rest,soap的更多相关文章
- Web API接口设计经验总结
在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winfo ...
- atitit.基于http json api 接口设计 最佳实践 总结o7
atitit.基于http json api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...
- Web API接口设计(学习)
1.在接口定义中确定MVC的GET或者POST方式 由于我们整个Web API平台是基于MVC的基础上进行的API开发,因此整个Web API的接口,在定义的时候,一般需要显示来声明接口是[HttpG ...
- API接口设计
1.场景描述 比如说我们要做一款APP,需要通过api接口给app提供数据.假设我们是做商城,比如我们卖书的.我们可以想象下这个APP大概有哪些内容: 1)首页:banner区域(可以是一些热门书籍的 ...
- Java生鲜电商平台-API接口设计之token、timestamp、sign 具体架构与实现(APP/小程序,传输安全)
Java生鲜电商平台-API接口设计之token.timestamp.sign 具体设计与实现 说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃 ...
- API接口设计之token、timestamp、sign 具体架构与实现(APP/小程序,传输安全)
Java生鲜电商平台-API接口设计之token.timestamp.sign 具体设计与实现 说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃 ...
- 优秀的API接口设计原则及方法(转)
一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户需要排查所有调用的代码,需要调整所有与之相关的部分,这些工作对他们来说都是额外的.如果辛辛苦苦完成这些以后,还发现了相关的bug,那对用户的 ...
- 微信小程序的Web API接口设计及常见接口实现
微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,通过小程序的请求Web API 平台获取JSON数据后,可以在小程序界面上进行数据的动态展示.在数据的关键 一环中,我们 ...
- php后台对接ios,安卓,API接口设计和实践完全攻略,涨薪必备技能
2016年12月29日13:45:27 关于接口设计要说的东西很多,可能写一个系列都可以,vsd图都得画很多张,但是由于个人时间和精力有限,所有有些东西后面再补充 说道接口设计第一反应就是r ...
随机推荐
- nodejs和ionic小助手
nodejs已经安装完成的情况下,安装ionic小助手 win+r打开cmd. 命令: 1.node -v(查看版本信息) 2.npm -v(查看版本信息) 3.npm install -g cnpm ...
- Swift中使用oc代码桥接设置
1 将oc的代码拖入项目中 2 新建一个头文件 在头文件中导入你想用的oc头文件 import "****.h" 3 在设置build Setting 中搜索bird 找到 Ob ...
- leetcode(js)算法之914卡牌分组
给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 X > ...
- SpringBoot事务管理
1.在UserMapper接口中添加更新和删除方法 package com.cppdy.mapper; import org.apache.ibatis.annotations.Delete; imp ...
- python并发编程之多进程1-----------互斥锁与进程间的通信
一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...
- dubbo源码之Directory与LoadBalance
Directory: 集群目录服务Directory, 代表多个Invoker, 可以看成List<Invoker>,它的值可能是动态变化的比如注册中心推送变更.集群选择调用服务时通过目录 ...
- laravel 视图
在实际开发中,除了 API 路由返回指定格式数据对象外,大部分 Web 路由返回的都是视图,以便实现更加复杂的页面交互,我们在前面已经看到过了视图的定义方式: return view('以.分隔的视图 ...
- kali linux宿主机和虚拟机互访实现方案
1.攻防模拟中,将DVWA安装到自己的宿主机中,在kali Linux中通过sqlmap和其他工具启动嗅探攻击,需要配置网络.虚拟机采用桥接方式,并复制Mac地址状况. 2.查看各自系统下的IP地址. ...
- kali linux DVWA config 问题解决方案
1.下载DVWA之后解压到 var/www/html目录下 unzip DVWA-master.zip -d /usr/www/html 2.配置 打开终端,执行以下命令: 将apache2停止:se ...
- 直径上的乱搞 bzoj1999求树直径上的结点+单调队列,bzoj1912负权树求直径+求直径边
直径上的乱搞一般要求出这条直径上的点集或者边集 bzoj1999:对直径上的点集进行操作 /* 给出一颗树,在树的直径上截取长度不超过s的路径 定义点u到s的距离为u到s的最短路径长度 定义s的偏心距 ...