codemix / restyii
针对 Yii 的有意见 RESTful、符合 HATEOAS 规范的扩展
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-08-24 04:00:19 UTC
README
A RESTful HATEOAS compliant extension for Yii. Allows your application to serve and accept JSON, JSONP, XML, CSV or HTML using the same code. The JSON and XML variants are based on the HAL media type.
警告:预_alpha 软件,使用风险自负。
安装。
使用 composer 安装。需要 php 5.3 或更高版本。
Restyii 使用自定义 WebApplication
替代了 Yii 默认的。因此,需要在您的 index.php
文件中将现有的对
Yii::createWebApplication($config)
的调用替换为
Yii::createApplication('Restyii\\Web\\Application', $config)
。
服务器配置。
示例 Restyii 服务器应用程序配置
<?php
Yii::setPathOfAlias('vendor', __DIR__.'/../../vendor'); // the path to the composer vendors dir
return array(
'name' => 'Restyii Demo',
'description' => 'This is a description of the application!',
'import' => array(
'application.resources.*',
),
'modules' => array(
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'yourSecretPassword',
// If removed, Gii defaults to localhost only. Edit carefully to taste.
'ipFilters'=>array('127.0.0.1','::1'),
'generatorPaths'=>array(
'vendor.codemix.restyii.gii-templates',
),
),
),
'components' => array(
'urlManager' => array(
'rules' => array(
'' => array('/default/index'),
array('class' => 'Restyii\\Web\\UrlRule'),
),
),
),
);
Restyii 附带一个 Gii 代码生成器,可以轻松生成资源。
客户端配置。
示例 Restyii 客户端应用程序配置
<?php
return array(
'name' => 'Restyii Client Demo',
'import' => array(
'application.resources.*',
),
'components' => array(
'api' => array(
'class' => 'Restyii\\Client\\Connection',
'baseUrl' => 'http://yourapihostname/',
),
...
),
);
RAVE
Restyii 遵循 RAVE 应用程序架构。RAVE 与 MVC 非常相似,但也有一些重要区别,RAVE 代表
- 资源
- 操作
- 视图
- 事件
重要的是,资源、操作、视图和事件都 描述 自己。这使得 RAVE 应用程序可以自我文档化。
资源
资源类似于 MVC 中的模型,但它们有一些关键区别。
- 单个资源明确地与特定的 URL 相关联。
- 资源知道如何链接到自己和相关资源。
- 资源知道如何 描述 自己和其属性。
- 资源知道如何 格式化 自己的属性。
在 RAVE 中,大部分业务逻辑应放在资源中,RAVE 接受 胖 模型方法。
操作
操作类似于 MVC 中控制器执行的操作。
- 操作 应该 接受任何类型的资源。这促进了代码重用,并得益于资源提供的丰富元数据。
- 操作知道应该期望哪些 HTTP 头部和查询字符串参数以及如何描述它们。
- 操作与用于执行操作的特定 HTTP 动词相关联,例如,用于删除操作的 DELETE。
- 操作返回 HTTP 状态码及其数据。
操作通常在单个资源或资源集合上操作。
视图
RAVE 视图实际上与 MVC 中的视图相同。在 Restyii 中,它们用于在客户端请求的不是 XML、JSON 等内容时装饰数据(通常为 HTML)。
事件
事件在资源以某种方式更改状态时触发,例如,当创建或更新特定模型时。RAVE 事件通常发布到消息总线或 pub/sub 通道,以便与应用程序中的其他进程通信,例如,允许浏览器中的“实时”通知。
与标准 Yii 应用程序的差异
为了实现 RAVE,Restyii 应用程序需要对标准的 Yii 方法进行一些更改。
其中一些重要的更改
-
Web 应用程序必须是
Restyii\Web\Application
的实例。 -
所有模块的默认控制器,包括主应用程序,应命名为
DefaultController
。这意味着正常的SiteController
应该重命名。DefaultController
应扩展Restyii\Controller\Root
类。 -
请求 (
Yii::app()->request
) 现在有一个getResponse()
方法,该方法返回一个Restyii\Web\Response
实例。此响应实例负责格式化和发送数据到客户端。 -
控制器始终使用基于类的操作,并且控制器与资源类型有明确的关联。资源控制器扩展了
Restyii\Controller\Model
。 -
操作始终扩展
Restyii\Action\Base
类。 -
而不是实现
run()
,操作应实现present()
和perform()
方法。 -
而不是调用
$this->render(...)
,操作应在present()
和perform()
方法内部返回响应数据的,同时附带适当的HTTP状态码。 -
应用程序有一个
schema
组件,它可以检查应用程序并确定可用的资源、操作等。 -
资源扩展了
Restyii\Model\ActiveRecord
。 -
资源有一个返回当前资源适当链接的
links()
方法。 -
资源有
classLabel()
和instanceLabel()
方法,它们返回资源类型和特定资源实例的适当标签。