qbnk / restler
luracast/restler 的分支,并添加了自己的功能。
Requires
- php: >=5.4
- ext-json: *
Requires (Dev)
- ext-libxml: *
- behat/behat: ^3.8@dev
- bshaffer/oauth2-server-php: dev-master
- guzzlehttp/guzzle: ^7.0@dev
- illuminate/view: ^8
- mustache/mustache: dev-master
- rize/uri-template: dev-master
- twig/twig: ^3
Suggests
- behat/behat: Behaviour driven development testing framework (see require-dev for details)
- bshaffer/oauth2-server-php: If you want to use OAuth2 for authentication
- guzzle/guzzle: RESTful api HTTP client framework (see require-dev for details)
- illuminate/view: If you want to use laravel blade templates with Html format
- mustache/mustache: If you want to use mustache/handlebar templates with Html format
- rodneyrehm/plist: If you need Apple plist binary/xml format
- symfony/yaml: If you need YAML format
- twig/twig: If you want to use twig templates with Html format
- zendframework/zendamf: If you need AMF format
Conflicts
- restler/framework: 3.*
This package is auto-updated.
Last update: 2024-08-28 18:06:48 UTC
README

版本 3.0 发布候选版 5
Restler 是一个简单有效的多格式 Web API 服务器,用 PHP 编写。
只需在 PHP 中处理您的业务逻辑,Restler 会处理 REST!
如果您服务器上没有 PHP >= 5.3.2 并且无法升级,可以使用 Restler 2 代替
Restler 3 - 通过设计提升 API
特性
- 无学习曲线
- 轻量级
- 灵活
- 高度可定制
- 许多示例,您可以在本地主机上尝试以开始使用
- 支持通过头部或请求参数(方法)发送和接收 HTTP 请求方法 HEAD、GET、POST、PUT、DELETE、OPTIONS 和 PATCH
- 支持 RESTful 和实用 REST API 设计
- 客户端可以使用 X-HTTP-Method-Override 头部,支持跨源资源共享和 JSONP
- 双向格式(媒体类型)转换,发送和接收
- 可插拔的内容格式化框架和 API
- 包含 JSON、XML、Yaml、Amf 和 Plist(XML 和二进制)格式支持
- 可插拔的认证方案
- OAuth 2 服务器
- 可插拔的过滤器以有效地管理 API 使用
- API 速率限制过滤器
- 路由
- 手动路由(注解)
- 使用
@url GET my/custom/url/{param}
PHPDoc 注释
- 使用
- 自动路由(反射)
- URL 到方法的映射
- URL 部分到方法参数的映射
- 查询参数到方法参数的映射
- 请求体到方法参数的映射
[计划中]
头部到方法参数的映射
- 手动路由(注解)
- 内置缓存
- 客户端缓存支持
- 代理缓存支持
- 服务器端缓存
[计划中]
ETag、If-None-Match 支持[计划中]
Last-Modified、If-Modified-Since 支持
- API 特性
- 始终支持 URL 编码格式以简化输入(POST 变量)
- 自动参数验证和类型转换
- 支持通过 URL 和/或供应商特定的 MIME 进行 API 版本控制
- 使用 Restler API 探索器 进行 API 文档和发现
- 节流和性能调整
- 管理
[计划中]
使用 PHPUnit 进行单元测试- 使用Behat和Guzzle进行行为驱动的API测试
- 使用Respect/Foundation进行命令行项目管理
- 使用Composer进行依赖管理
- 源代码在LGPL协议下分发
Git仓库和分支
最稳定和最新的版本维护在
master
分支,之前的版本保存在如v1
和v2
这样的分支中包含当前版本(如
v3
)的版本分支用于构建下一个版本。其文档可能不会频繁更新,因此仅供勇敢者使用。功能分支(如
features/html
和features/router
)纯粹用于实验目的,尝试一个功能
安装
请确保您的服务器上安装了PHP 5.3.2或更高版本(至少推荐使用5.3.4以避免潜在的错误)
1. 安装Composer
Restler使用Composer来管理其依赖项。首先,下载一份composer.phar
副本。它可以保存在您的项目文件夹中,或者在理想情况下保存在usr/local/bin
中以在所有项目中全局使用。如果您使用Windows,可以使用windows安装程序。
2. 安装Restler
选项1:使用composer create-project
您可以通过在终端中运行创建项目命令来安装Restler。用您的实际项目名称替换{projectName}。它将创建一个具有该名称的文件夹并安装Restler。
php composer.phar create-project luracast/restler {projectName}
注意:
如果您不希望包含额外的格式和行为驱动工具,可以在命令中包含
--no-dev
以强制排除开发包。如果您想尝试bleading edge v3分支或任何功能分支,在上述命令中包含
3.x-dev
或dev-features/html
。
选项2:从GitHub下载
安装Composer后,下载Restler框架的最新版本,并将其内容提取到您的服务器上的一个目录中。接下来,在Restler项目的根目录中,运行php composer.phar install
(或composer install
)命令以安装框架的所有依赖项。此过程需要服务器上安装Git以成功完成安装。
如果您想更新Restler框架,可以发出php composer.phar update
命令。
注意:如果您无法在服务器上安装composer和git,您可以在您的开发机器上安装并运行它们。生成的文件和文件夹可以上传并在服务器上使用。
3. 配置
理想情况下,公共文件夹应映射为您的Web根目录,这虽然是可选的,但建议这样做以避免暴露不必要的文件和文件夹。
4. 尝试使用
在本地主机中尝试实时示例
运行一些测试
更新behat.yml
中指定的base_url,然后尝试以下命令
bin/behat
这将测试预期行为,例如
Feature: Testing CRUD Example
Scenario: Creating new Author with JSON
Given that I want to make a new "Author"
And his "name" is "Chris"
And his "email" is "chris@world.com"
And the request is sent as JSON
When I request "/examples/_007_crud/authors"
Then the response status code should be 200
And the response should be JSON
And the response has a "id" property
一切准备就绪,快乐地使用Restler! :)
快速入门指南
按照以上步骤安装Restler后,您可以按照以下步骤快速创建应用程序
1. 编写API
创建您的所有所需公共和受保护方法的API类
2. 打开网关
创建以下gateway (index.php)
<?php
require_once '../../../vendor/restler.php';
use Luracast\Restler\Restler;
$r = new Restler();
$r->addAPIClass('YourApiClassNameHere'); // repeat for more
$r->handle(); //serve the response
3. 美化URL
启用URL重写
确保所有请求通过启用网站上的URL重写路由到index.php
例如:
如果您使用Apache,可以使用以下.htaccess
文件
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<IfModule mod_php5.c>
php_flag display_errors On
</IfModule>
注意: 这需要在
httpd.conf
文件中将AllowOverride
设置为All
而不是None
,并且可能需要调整某些服务器配置。有关更多信息,请参阅 mod_rewrite 文档。
如果您使用的是 Nginx,请确保已设置 server_name
并将 PHP 脚本传递给监听 127.0.0.1:9000 的 fast cgi (PHP-FPM)。
server {
listen 80;
server_name api.luracast.com; //change it to match your server name
//... other stuff
location ~ \.php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
//... other stuff
}
注意: 这需要正确安装和配置 PHP、PHP-FPM。有关更多信息,请参阅 PHP FastCGI 示例。
4. 自定义
调整以满足您的需求
<?php
require_once '../../../vendor/restler.php';
use Luracast\Restler\Restler;
use Luracast\Restler\Defaults;
//set the defaults to match your requirements
Defaults::$throttle = 20; //time in milliseconds for bandwidth throttling
//setup restler
$r = new Restler();
$r->addAPIClass('YourApiClassNameHere'); // repeat for more
$r->addAPIClass('Resources'); //from restler framework for API Explorer
$r->addFilterClass('RateLimit'); //Add Filters as needed
$r->handle(); //serve the response
如果您已成功完成安装步骤 2,则应在 vendor/Luracast/explorer
文件夹中安装了 Restler API Explorer。创建 vendor/Luracast/explorer/dist
的符号链接或复制该文件夹并将其命名为 explorer
将 explorer 放在与 index.php
相同的文件夹中
通过在浏览器中打开 Web 根目录下的 explorer/index.html
来探索 API 并尝试它
祝您探索愉快! :)
注意: 使用 eAccelerator 可能会使 Restler 失败,因为它会删除注释。更多信息请参阅 此处
5. 注释
Restler 支持 API 微调的 PHPDoc 注释形式的注释
它们在 注释 部分中有详细说明
6. 授权
为了保护您的 API,请进行身份验证并允许有效的用户
<?php
require_once '../../../vendor/restler.php';
use Luracast\Restler\Restler;
$r = new Restler();
$r->addAPIClass('YourApiClassNameHere'); // repeat for more
$r->addAuthenticationClass('CustomAuth'); //Add Authentication classes as needed
$r->handle(); //serve the response
7. 开始生产
默认情况下,Restler 以调试模式运行,更侧重于 API 开发者,通过显示详细的错误消息并将 API 结果格式化为人可读的形式
通过开启生产模式,您将获得一些性能提升,因为它将缓存路由(注释解析仅在每次 API 调用时发生一次),一些其他文件,并避免提供调试信息
<?php
require_once '../../../vendor/restler.php';
use Luracast\Restler\Restler;
//setup restler
$r = new Restler(true); //turn on production mode by passing true.
//If you are using file based cache (the default) make sure cache folder is
//writable. when you make changes to your code make sure you delete the
// routes.php inside the cache folder
//...
变更日志
Restler 3.0 RC5
- 添加了作用域(依赖注入容器)。它的注册方法允许添加具有依赖关系的 API 类。
- 改进了 HtmlFormat 以支持 blade 模板,并使其易于扩展以添加您自己的模板。
- HtmlFormat::$format 已重命名为 HtmlFormat::$template 以提高清晰度
- HtmlFormat 现在支持自动模板化,根据映射的 URL 加载相关模板。
- Tag,一个用于以面向对象方式生成 HTML 标签的实用程序类。
- Emmet 类扩展了 emmet 的一部分以创建模板引擎。
- Forms 类用于自动生成任何 API 方法的表单,预建在 HTML5、Twitter Bootstrap 3、Zurb Foundation 格式中。
- Validator 改进以允许抑制验证错误立即抛出异常,这样 API 调用就可以到达 API 方法。
- Validator 改进以更友好地支持表单验证。
- Nav 类创建 HTML 导航界面。
- OAuth 示例已更新,以使用 OAuth2 库的 1.0 版本。
- 许多错误修复和改进。
Restler 3.0 RC4
- API 方法参数中的
$request_data
和 Restler 实例上的getRequestData()
现在排除了$_GET
参数。 - 从 API 方法返回 null 现在排除了响应体。此行为可以通过将
Defaults::$emptyBodyForNullResponse
设置为 false 来更改。 - 在测试文件夹中添加了许多 API 示例,用于使用 BDD 逐个测试功能。
- 支持自定义类参数和自定义类参数数组
- 当参数是唯一参数时,可以直接将其作为请求体传递
- 修复了 composer.json 并将稳定版本作为 composer 包发布到 packagist。
- 添加了新的 Routes 类,改进了路由,包括通配符路由和基于参数类型的智能路由。
- 支持使用任何自动加载器,包括composer的自动加载器,以实现最大程度的互操作性。
- 将CFPropertyList迁移到使用rodneyrehm/plist包。
- 移除了所需的包,因为它们并非真正意义上的“必需”,Restler开箱即用。
- 创建支持的包作为require-dev,这些包将通过
composer install --dev
安装。 - 为所有支持的包添加了建议部分。
- 为包描述符添加了关键词。
- 添加了分支别名,以表明v3是v3.0.x-dev的快照。
- 将Restler作为包发布到packagist。
Restler 3.0 RC3
- 添加了Defaults::$cacheDirectory以在单个中央位置设置缓存目录。
- 通过扩展JsonFormat添加了JsFormat类以支持JSONP。
- 修复了当请求体中发送的JSON不是对象或数组时的致命错误。
- 通过在找到分隔符且标签不是@pattern时进行数组转换,改进了内联注释的解析。
- 重写了RateLimit类以支持所有时间单位second|minute|hour|day|week|month,以实现更精细的控制。
- 改进了Resources类,以包含对正文参数的描述。
- 修复了Resources,当返回类型是自定义类的数组时,不会包含命名空间。
- 修复了当当前API名称是另一个API的一部分时,资源不会包含另一个类的API的问题。
- 添加了两种排除API的方法。
Resources::$excludedHttpMethods
(数组)Resources::$excludedPaths
(数组)
- 修复了PHP < 5.4中的未转义Unicode错误。
- 修复了解析ValidationInfo的@choice内联注释时的错误。
- 添加了对字符集的支持。
- 添加了对(基本)语言的支持。
- 更新了BDD测试以包含新功能。
- 修复了Restler类中的一个bug,该bug会影响
Defaults
的$_GET覆盖。 - 修复了XmlFormat解析XML内容到数组时的bug。
- 通过JsonFormat的jsFormat扩展添加了对JSONP的支持。
- 修复了PHP < 5.4中JsonFormat的Unicode未转义bug。
- 修复了顺序,以便在编码响应之前调用responseFormat->setCharset。
- 改进了文档并修复了少量bug。
Restler 3.0 RC2
- 筛选类可以使用认证状态,通过实现iUseAuthentication接口,对认证用户做出不同的响应。
- 添加了
RateLimit
类以限制API的使用。 - 修复了setCompatibilityMode的bug。
- 更新了Resources,以使用路径而不是类名进行资源标识。
- 启用了文档的访问控制。
- 修复了CommentParser以忽略重复的空白,从而正确解析注释。
- 修复了@status和@expires标签的注释解析。
- 添加了以下示例
- 文档
- 速率限制
- 访问控制
- CRUD示例已更新,包括PATCH支持
Restler 3.0
Restler 3.0完全重写自Restler 2.0,考虑到以下最佳实践
- PHP编码
- RESTful和/或实用REST
- API设计
Restler 3.0
- 使用命名空间、延迟静态绑定和闭包,因此它仅适用于
PHP 5.3+
(如果需要PHP 5.0+
支持,请使用Restler 2) - 向后兼容Restler 1和2。使用
$r->setCompatibilityMode($version);
- 支持混合API,为认证用户提供扩展数据。使用
@access hybrid
PHPDoc注释。 - 默认情况下使用智能自动路由,其中API方法参数具有默认值不再映射到URL,而是映射到查询字符串,以减少URL中的歧义。
- 支持以查询字符串的形式设置
suppress_response_codes
,当设置为 true 时;所有 HTTP 响应将以 HTTP OK 返回,错误信息包含在响应体中,以适应移动设备和权限较低的客户端。 - 改进了
CommentParser
,增加了对多种格式嵌入数据的支持- 内联文档注释
{@name value}
- 查询字符串参数 ``` param1=value¶m2=value2```
- JSON ``` {"param1": value, "param2": value2}``` 可以放置在多行中
- 内联文档注释
- 包含具有静态属性的
Defaults
类,可以根据需要修改 - 现在 iAuthenticate 使用
__isAllowed
方法而不是__isAuthenticated
,以便同一个类可以用于认证或过滤 - 添加了
iUseAuthentication
接口,以帮助混合访问 API 方法和过滤器了解用户认证状态 - 更新了
iFilter
接口,以提供字符集支持 - ...(后续更多)
Restler 2.0
Restler 2.0 是一个重大重写,采用约定优于配置的原则,并针对性能进行了优化。以下是主要变更和改进
- 将方法映射到 URI 的 PHPDoc 注释现在是可选的。
- 所有不以下划线开头的公共方法都将自动映射到方法名(
gateway\classname\methodname\param1\...
) - 如果我们没有指定
$restler->addAPIClass
的第二个参数,它将映射到类名,而不是映射到根目录 - Restler 2 是为 PHP 5.3 及以上版本编写的,但它使用了 compat.php,可以在 PHP 5.0 及以上版本的任何 PHP 版本上运行