本文章的第四点通过实战一个 php+restfulAPI 设计例子来加深对restful的学习,那部分最实用重要,请耐心看完~
一、restful概述
RESTful架构,可称为当前互联网最流行的一种软件架构风格,结构清晰,符合标准,易于理解,方便扩展。来说说restful名称的由来,REST(即Representational State Transfer的缩写),意为“表现层状态转化”,如果一种架构符合REST原则,则称这种架构为restful架构。是一种架构设计风格,提供了设计风格和约束条件。
二、restful、RPC、SOAP的对比
RPC是什么?即远程过程调用。允许分布式应用程序调用网络上的不同计算机的可用服务的机制,也可以理解是一台计算机通过参数访问另一台计算机的方法,得到返回结果的方法,其实就是一台计算机去访问服务器的资源。
restful与SOAP两种服务接口的区别:
②restful使用的是标准的HTTP方法(get、put、post、delete)来抽象所有web系统的服务能力,soap应用则通过定义自身个性化的接口方法来抽象web服务。
三、讲讲HTTP
HTTP特点:
①HTTP协议是无状态的。也就是说每次HTTP请求都是独立的,任何两个请求之间没有什么联系,这这时你可能会问了,那用户访问网站的请求怎么被跟踪的?这是可能是由于cookie和session来功能。
②多次HTTP请求。在客户端多数情况下页面并不是一次请求就成功的,服务器首先响应html页面,然后浏览器收到响应之后发现此时页面有许多外部资源比如css,js,图片等,还会自动发送HTTP请求这些需要的资源,现在的HTTP版本支持管道机制,可同时请求和响应多个请求,大大提高了效率。
③基于TCP协议。现在的版本默认是持久连接的,也就是多次HTTP请求使用一个TCP连接。
HTTP组成:
分为请求和响应两部分,请求指的是客户端发送给服务器的消息,响应指的是服务器收到消息后返回给客户端的消息。都建立在URI(统一资源标识符),即格式为如下
请求格式和举例:
请求行(方法、路径、协议)
请求头信息(格式为key=value)
空行
请求主体(可选)(即是发送的内容)
例子:
host:localhost
(PS:这里指的是发送的信息是要经过url编码的)
content-length:35 (PS:这里的post请求必须填上请求主体的长度,即这一行,否则一回车就给发送了没有下面的请求主体内容的数据传输的)
//此处空一行
name=zhangsan
四、restfulAPI实战例子
工具使用:wampserver集成开发和环境,Navicat数据库可视化工具,phpstrom编辑器,postman后端请求测试工具
tips:设计restfulAPI接口 时注意一些规范还有对应的请求方式代表的含义,如下图:
下图给出了这次小例子的接口定义记录
restfulAPI根据需求分析,使用mysql建立两张数据表:user表和article表,对应字段如下图:
PS:创建表时记得把主键字段id勾选上自动递增,原因下文有讲。
article表
1、对用户模块的用户注册和用户登录进行代码书写,此处贴核心部分
注册功能
部分代码登录功能
部分代码此处讲讲写用户模块时踩到的坑:①在设计数据库user表的时候我的id字段没有设置自动增长,导致后面的注册时一直注册失败,原因是id是主键,而模拟数据插入的时候是没有插入用户id的,所以主键重复这样导致了一直报插入的sql语句执行失败。②写sql语句的数据字段和表名需要用 英文状态下的` `括起来,而不是英文状态下的单引号‘’,这点小错误我竟然 败在这上面20分钟才找出来,可恶啊。
PS:用户注册功能做好了,验证的时候发现Navicat数据库可视化工具发现插入表里面的中文数据出现乱码,此时莫慌,先查看phpstrom编写php文件时是否按utf-8来编码的,还有数据库创建的时候是否排序规则选择utf8_general_ci,如下图所示。
如果这番检查都没错的话,就可能是Navicat工具连接的问题了,先断开连接,然后右键连接,选择连接属性-->选择高级,把编码改为utf-8,如下图所示,保存设置后就可以再次连接起来看看是否中文显示正常了。
2、对文章模块的相关操作进行代码书写,此处贴核心部分
文章查看功能
部分代码其他业务逻辑代码就不贴出来了,有需要直接去我的码云下载git clone整个程序包。
接下来开始进入restful的API设计了。
统一一个index.php文件,php是通过一个.htaccess文件进行规则重写的,而restful风格的API则是专门定义一个Rest类来进行设计的。关于这个Rest类的解读,里面有定义拦截不被允许请求的方法,比如用户模块注册登录涉及敏感信息,应该设计为只能通过post请求发送,而内部处理逻辑方法设计为private私有的,只通过public方法来暴露供外部访问的接口,这就是restful风格的应用设计
下图是使用postman工具进行接口测试的一个截图
postman最后总结
restful说到底只是一种设计风格,而不是一个标准,并不是所有的web应用都必须采用这种风格,还是要依据场景来决定采用什么风格,比如有些情况下确实是需要采用soap这种架构风格。