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

最多的是app接口

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的更多相关文章

  1. Web API接口设计经验总结

    在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winfo ...

  2. atitit.基于http json api 接口设计 最佳实践 总结o7

    atitit.基于http  json  api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...

  3. Web API接口设计(学习)

    1.在接口定义中确定MVC的GET或者POST方式 由于我们整个Web API平台是基于MVC的基础上进行的API开发,因此整个Web API的接口,在定义的时候,一般需要显示来声明接口是[HttpG ...

  4. API接口设计

    1.场景描述 比如说我们要做一款APP,需要通过api接口给app提供数据.假设我们是做商城,比如我们卖书的.我们可以想象下这个APP大概有哪些内容: 1)首页:banner区域(可以是一些热门书籍的 ...

  5. Java生鲜电商平台-API接口设计之token、timestamp、sign 具体架构与实现(APP/小程序,传输安全)

    Java生鲜电商平台-API接口设计之token.timestamp.sign 具体设计与实现 说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃 ...

  6. API接口设计之token、timestamp、sign 具体架构与实现(APP/小程序,传输安全)

    Java生鲜电商平台-API接口设计之token.timestamp.sign 具体设计与实现 说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃 ...

  7. 优秀的API接口设计原则及方法(转)

    一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户需要排查所有调用的代码,需要调整所有与之相关的部分,这些工作对他们来说都是额外的.如果辛辛苦苦完成这些以后,还发现了相关的bug,那对用户的 ...

  8. 微信小程序的Web API接口设计及常见接口实现

    微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,通过小程序的请求Web API 平台获取JSON数据后,可以在小程序界面上进行数据的动态展示.在数据的关键 一环中,我们 ...

  9. php后台对接ios,安卓,API接口设计和实践完全攻略,涨薪必备技能

    2016年12月29日13:45:27    关于接口设计要说的东西很多,可能写一个系列都可以,vsd图都得画很多张,但是由于个人时间和精力有限,所有有些东西后面再补充   说道接口设计第一反应就是r ...

随机推荐

  1. nodejs和ionic小助手

    nodejs已经安装完成的情况下,安装ionic小助手 win+r打开cmd. 命令: 1.node -v(查看版本信息) 2.npm -v(查看版本信息) 3.npm install -g cnpm ...

  2. Swift中使用oc代码桥接设置

    1 将oc的代码拖入项目中 2 新建一个头文件 在头文件中导入你想用的oc头文件  import "****.h" 3 在设置build Setting 中搜索bird 找到 Ob ...

  3. leetcode(js)算法之914卡牌分组

    给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 X > ...

  4. SpringBoot事务管理

    1.在UserMapper接口中添加更新和删除方法 package com.cppdy.mapper; import org.apache.ibatis.annotations.Delete; imp ...

  5. python并发编程之多进程1-----------互斥锁与进程间的通信

    一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...

  6. dubbo源码之Directory与LoadBalance

    Directory: 集群目录服务Directory, 代表多个Invoker, 可以看成List<Invoker>,它的值可能是动态变化的比如注册中心推送变更.集群选择调用服务时通过目录 ...

  7. laravel 视图

    在实际开发中,除了 API 路由返回指定格式数据对象外,大部分 Web 路由返回的都是视图,以便实现更加复杂的页面交互,我们在前面已经看到过了视图的定义方式: return view('以.分隔的视图 ...

  8. kali linux宿主机和虚拟机互访实现方案

    1.攻防模拟中,将DVWA安装到自己的宿主机中,在kali Linux中通过sqlmap和其他工具启动嗅探攻击,需要配置网络.虚拟机采用桥接方式,并复制Mac地址状况. 2.查看各自系统下的IP地址. ...

  9. kali linux DVWA config 问题解决方案

    1.下载DVWA之后解压到 var/www/html目录下 unzip DVWA-master.zip -d /usr/www/html 2.配置 打开终端,执行以下命令: 将apache2停止:se ...

  10. 直径上的乱搞 bzoj1999求树直径上的结点+单调队列,bzoj1912负权树求直径+求直径边

    直径上的乱搞一般要求出这条直径上的点集或者边集 bzoj1999:对直径上的点集进行操作 /* 给出一颗树,在树的直径上截取长度不超过s的路径 定义点u到s的距离为u到s的最短路径长度 定义s的偏心距 ...