RESTful介绍和yii2中RESTful如何配置
REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资源"(Resources)的"表现层"。
从学术上来讲:
RESTful提出的初衷,是考虑到长期以来,软件研究主要关注软件设计的分类、设计方法的演化,
很少客观地评估不同的设计选择对系统行为的影响。而相反地,网络研究主要关注系统之间通信行为的细节、
如何改进特定通信机制的表现,常常忽视了一个事实,那就是改变应用程序的互动风格比改变互动协议,对整体表现有更大的影响。
作者的设想是在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构(这段话,还不太理解!)
什么是RESTful呢?
通俗的理解就是,RESTful就是一个逻辑数据API,一个逻辑数据接口。我们可以通过RESTful这一接口,实现一个功能强大,性能优越的系统架构,为其他终端设备上面的应用程序提供相关的逻辑数据操作。那什么是逻辑数据呢? 逻辑数据就是从逻辑上,从实际意义上抽象数据而得到的,你比如在网上买一张车票,对于票这个数据而言。它在数据库中是用几个字段 票的id 票车程 票价格 开车时间 来表示的。但我们一般将其抽象成一个一个简单的名词 车票 一旦操作车票自然就是在后台操作这几个字段了。是不是有一点像对象。
(1)在RESTful中所有的逻辑数据可以被唯一的url所定位,通过这个url就能获得这个逻辑数据也就是说只要有对应 的url定位标识符,就可以确定对应的逻辑数据。
(2)所有的逻辑数据通过http协议的动作进行操作,如GET POST PUT DELETE
设计标准
目前尚未形成严格统一的RESTful标准,但是公认的有这么几条原则
1.每一个URI代表一种逻辑资源
2.API应该对程序员友好,url简便,有意义。并且在浏览器地址栏容易输入。即必须美化路径。
3.客户端通过HTTP动词,对服务器端逻辑资源进行操作
4.应该具有足够的灵活性来支持上层ui.(API的就是后台程序员的UI,和其他UI一样,你必须仔细考虑它的用户体验!)
5.逻辑资源应该是名词而不是动词,因为对这个逻辑数据的操作都包含在了http动词中了。
举几个url访问的例子
情景: 向服务器查询车票 GET /tickets
向服务器查询具体车票 GET /tickets?tickets_id=1
向服务器购买具体车票 POST /myTicket?tickets_id=1
向服务器退票 DELETE /myTicket?tickets_id=1
yii2框架中的RESTful
1.简介:
Yii 提供了一整套用来简化实现RESTful风格的Web Service服务的 API
Yii 支持以下关于 RESTful 风格的 API
支持 Active Record 类的通用API的快速原型
涉及的响应格式(在默认情况下支持 JSON 和 XML)
支持可选输出字段的定制对象序列化
适当的格式的数据采集和验证错误
支持 HATEOAS
有适当HTTP动词检查的高效的路由
内置OPTIONS和HEAD动词的支持
认证和授权
数据缓存和HTTP缓存
速率限制
2.在yii2中配置RESTful
(1)在basic/web下添加.htaccess文件
注意该文件没有文件名,或者说.htaccess就是他的文件名,这种形式的文件正常情况,在windows下是无法生成的,所以需要一些特殊的办法,在此稍微列举一下。
a.使用DOS命令:使用屏幕编辑命令copy con .htaccess后回车,输入内容,最后按下ctrl+z结束编辑,
就成功生成了.htaccess;
b.直接通过文本编辑工具保存,例如记事本,ultraEdit等等,不过保存的时候选择所有文件就可以了
c.打开Windows的记事本---“文件->另存为”---在另存为的“保存类型”下拉选单中选取“所有文件”类型---在“文件名”中输入.htaccess---保存
.htaccess的作用主要是,由于开启urlmanager后访问url不会交给index.php。所以需要.htaccess 根据访问url,来分工(个人见解),当一个访问过来,.htaccess文件分析访问url中的文件或目录是否存在,要是存在直接将访问的目的文件交付,要是不存在,交付给index.php处理。 .htaccess文件内容如下:
RewriteEngine on(2)配置urlManager:
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php
接着我们需要在config/web.php中配置urlManager,为什么要配置这个呢?之前basic都是将其注释掉的?
原因在于之前我们直接通过url访问某个控制器下的函数格式是:localhost/basic/web/index.php?r=controllerXX/actionXX 这种访问形式很繁琐,不易检错,增加代码的长度,模糊。urlmanager正是来解决这种问题的,即管理访问url的标准格式,使用之后我们可以省去index.php以及将路径化。新的访问格式如下:localhost/basic/web/controllerXX/actionXX。在本urlmanager中我们设置rules的class=>yii\rest\UrlRule 是因为我们需要启用yii2中RESTful,同时还必须指定那几个控制器是符合RESTful访问的控制器。切记,urlManager是写在components[ ]里面的。内容如下:
'urlManager' => [特别提示:在本例中是将一个module模块 v1下的两个控制器table login设置为RESTful api 在实际运用中,可以根据实际情况设置作为RESTful api的控制器。
'enablePrettyUrl' => true,//是否优化url,即路径化1
'showScriptName' => false,//是否省略index.php
'enableStrictParsing' => false,//是否严格解析请求,在enablePrettyUrl使用时才起作用
'rules' => [
[
'class' => 'yii\rest\UrlRule', //这一句是必须添加的,因为urlManager类中默认是
'controller' => ['v1/table','v1/login'],//设置RESTful的api,设置module id为v1下的控制器table,login为api
],
],
],
(3)配置启用json输入:
在config/web.php里的request=>[ ]数组添加json解析类 parsers=>[ ]
'request' => [要是少了parsers=>[ ],RESTful API将仅可以分辨 application/x-www-form-urlencoded 和 multipart/form-data 输入格式。添加了后便能识别application/json格式。
'cookieValidationKey' => '098udfhfj',
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
]
至此yii2中RESTful的配置就完后了。下文将讲解如何写RESTful 的api 控制器和如何测试调用等。