从版本 3 RC6 升级以获得最新的 PHP 支持
Restler 是一个用 PHP 编写的简单有效的多格式 Web API 服务器。
只需在 php 中处理您的业务逻辑,restler 将处理其余的事情!
@url GET my/custom/url/{param}
PHPDoc 注释最稳定和最新的版本位于master
分支,以前的版本位于v4
、 v3
、 v2
和v1
等版本分支中。
当前版本的版本分支(例如v5
用于构建下一个版本。它的文档可能不会经常更新,因此是为大胆的人保留的。
诸如features/html
和features/router
之类的功能分支纯粹是出于实验目的来尝试某个功能。准备好后,它们可能会被合并。
安装此存储库以尝试示例。
确保您的服务器上有 PHP 5.4 或更高版本。我们建议使用最新版本以获得更好的性能。
Restler 使用 Composer 来管理其依赖项。首先,下载composer.phar
的副本。它可以保存在您的项目文件夹中,或者最好保存在usr/local/bin
中,以便在所有项目中全局使用它。如果您使用的是 Windows,则可以使用 Composer Windows 安装程序。
您可以通过在终端中运行创建项目命令来安装 Restler。将 {projectName} 替换为您的实际项目名称。它将创建一个具有该名称的文件夹并安装 Restler。
php composer.phar create-project luracast/restler {projectName}
笔记:-
如果您不需要其他格式和 BDD 工具,您可以包含 >
--no-dev
来强制排除开发包。如果您想尝试前沿 v3 分支或任何功能 > 分支,请在上述命令中包含
3.x-dev
或dev-features/html
安装 Composer 后,下载最新版本的 Restler 框架并将其内容解压到服务器上的目录中。接下来,在 Restler 项目的根目录中,运行php composer.phar install
(或composer install
)命令来安装所有框架的依赖项。此过程需要在服务器上安装Git才能成功完成安装。
如果您想更新 Restler 框架,您可以发出php composer.phar update
命令。
注意:-如果您不允许在服务器上安装 Composer 和 git,您可以在开发计算机上安装并运行它们。生成的文件和文件夹可以上传到服务器上并使用。
理想情况下,公共文件夹应映射为您的 Web 根目录,这是可选的,但建议避免暴露不需要的文件和文件夹。
在您的本地主机中尝试实时示例。
您可以使用
composer serve
命令启动PHP的内置服务器。
更新behat.yml
中指定的 base_url,然后尝试以下命令
vendor/bin/behat
或者你可以运行
composer test
这将根据预期的行为测试示例,例如
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 "[email protected]"
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 api 服务器
最方便的选择是使用应用程序模板,例如 Restler Application,它与许多包集成,也可以帮助我们处理业务逻辑。如果您选择此选项,请在该存储库中选择一个分支,然后按照那里提供的说明继续操作。
从头开始创建一个项目,以便您可以完全控制应用程序的各个方面。如果您选择此选项,请按照以下步骤操作。
composer init
并按照步骤创建composer.json
restler/framework
并输入^5
作为版本约束。composer require restler/framework:^5
我们使用
restler/framework
代替luracast/restler
来减少包所需的空间。它来自 https://github.com/Luracast/Restler-Framework 它仅包含 src 文件夹的内容。
即使您从头开始构建,检查应用程序模板也将有助于做出文件夹结构决策并查找其他有用的包。
使用所有需要的公共和受保护方法创建API 类
创建网关(public/index.php)如下
<?php
require_once __DIR__ . ' /../vendor/autoload.php ' ;
use Luracast Restler Restler ;
$ r = new Restler ();
$ r -> addAPIClass ( ' YourApiClassNameHere ' ); // repeat for more
$ r -> handle (); //serve the response
启用 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 示例。
微调以满足您的需求
<?php
require_once __DIR__ . ' /../vendor/autoload.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 ( ' Explorer ' ); //from restler framework for API Explorer
$ r -> addFilterClass ( ' RateLimit ' ); //Add Filters as needed
$ r -> handle (); //serve the response
探索 api 并通过从浏览器的 Web 根目录打开explorer/index.html
来尝试一下
快乐探索! :)
注意:-使用 eAccelerator 可能会导致 Restler 失败,因为它会删除注释。更多信息可以在这里找到
Restler支持PHPDoc注释形式的注解,用于API微调
它们在注释下有详细记录
为了保护您的 api,验证并允许有效用户
<?php
require_once ' ../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
默认情况下,Restler 在调试模式下运行,通过显示详细的错误消息并将 api 结果美化为人类可读形式,对 API 开发人员进行了更精细的调整
通过打开生产模式,您将获得一些性能提升,因为它将缓存路由(注释解析仅发生一次,而不是每次 api 调用)、很少的其他文件并避免给出调试信息
<?php
require_once ' ../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
//...
注意:-当生产模式设置为
true
时,它始终使用缓存,并且不会检测更改和新路由(如果有)。您的持续集成管道或 git hook 应在部署过程中删除此文件。或者,您可以将第二个参数传递给 Restler 构造函数,以便在需要应用更改时刷新缓存。
composer serve
命令添加php开发服务器支持。composer serve
运行服务器后,能够使用composer test
命令运行测试。$restler->addAPIClass("Luracast/Restler/Explorer", 'swagger')
将其映射到/swagger
。改进了 Routes 类,提供 findAll 方法来列出特定版本的 API 的所有路由(不包括指定路径和 http 方法)。
路线发现时使用的魔法属性,忽略实际属性。这对于动态模型类(例如 Eloquent)很有用。
当参数是对象时,路由现在允许@required
和@properties
为数组。这有助于我们为每个 api 方法选择不同的属性。示例{@properties property1,property2,property3}
{@required property1,property2}
使 api 仅查找 3 个属性,其中 2 个是必需的。
优化了导航类。现在它使用Routes::findAll()
以及 Explorer 类
Restler 类具有 setBaseUrls 方法来设置可接受的基本 url,可以使用$_SERVER['HTTP_HOST']
设置。阅读本文以了解原因。这在以下情况下很有用:
Restler 类现在允许通过从 api 方法设置$this->restler->responseCode
来覆盖状态代码。
改进了 Forms 类,将嵌入的属性发送到 emmet 模板。例如
/**
* {@id form1}
*
* @param string $name
* @param int $age
*/
生成以下表格
<form role="form" id="form1" method="POST" ...
因为 emmet 模板中有 id (见下文)
form[role=form id=$id# name=$name# method=$method# action=$action# enctype=$enctype#]
@param
注释的嵌入属性来轻松设置 html 属性(例如 id、accept 等)@class
注释设置其属性。示例: - @class Validator {@holdException}
使验证器保留异常而不是抛出异常@property
、 @property-read
、 @property-write
以支持记录动态属性。string[]
、 DateTime[]
Scope::$resolver
属性添加了对您选择的外部 DI 容器的支持。String
类重命名为Text
以支持 PHP 7(String 是 php7 中的保留关键字)