從版本 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 中的保留關鍵字)