обновлен с версии 3 RC6 для последней поддержки PHP
Restler — это простой и эффективный многоформатный сервер веб-API, написанный на PHP.
Просто разберитесь со своей бизнес-логикой на 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, вместо этого вы можете использовать установщик Windows Composer.
Вы можете установить Restler, выполнив команду создания проекта в своем терминале. Замените {projectName} фактическим названием проекта. Он создаст папку с таким именем и установит Restler.
php composer.phar create-project luracast/restler {projectName}
Примечание:-
Если вам не нужны дополнительные форматы и инструменты BDD, вы можете включить >
--no-dev
чтобы принудительно исключить пакеты разработки.Если вы хотите попробовать ветку «Bleding Edge v3» или любую из веток Feature >, включите
3.x-dev
илиdev-features/html
в приведенную выше команду.
После установки Composer загрузите последнюю версию платформы Restler и извлеките ее содержимое в каталог на своем сервере. Затем в корне вашего проекта Restler запустите команду php composer.phar install
(или composer install
), чтобы установить все зависимости платформы. Для успешного завершения этого процесса на сервере должен быть установлен Git.
Если вы хотите обновить платформу Restler, вы можете ввести команду php composer.phar update
.
Примечание. Если вам не разрешено устанавливать композитор и git на вашем сервере, вы можете установить и запустить их на своей машине разработки. Полученные файлы и папки можно загружать и использовать на сервере.
В идеале общая папка должна быть сопоставлена с корнем вашего веб-сайта. Это необязательно, но рекомендуется избегать раскрытия ненужных файлов и папок.
Попробуйте живые примеры на вашем локальном хосте.
Вы можете запустить встроенный сервер PHP с помощью команды
composer serve
.
Обновите base_url, указанный в behat.yml
, а затем попробуйте следующую команду.
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
Все готово, счастливого ESTling! :)
У нас есть два варианта создания собственного API-сервера Restler.
Самый удобный вариант — использовать шаблоны приложений, такие как 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-адресов
Убедитесь, что все запросы направляются на index.php, включив перезапись URL-адресов для вашего веб-сайта.
Например:-
Если вы используете 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 для быстрого прослушивания cgi (PHP-FPM) на 127.0.0.1:9000.
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 и опробуйте его, открыв 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-перехватчик должны удалить этот файл в процессе развертывания. В качестве альтернативы вы можете передать второй параметр конструктору restler, чтобы обновить кеш, когда необходимо применить изменения.
composer serve
.composer test
после запуска сервера с помощью composer serve
в другом окне.$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 теперь позволяет переопределить код состояния, установив $this->restler->responseCode
из метода API.
Улучшен класс Forms для отправки внедренных свойств в шаблон emmet. Например
/**
* {@id form1}
*
* @param string $name
* @param int $age
*/
Создает следующую форму
<form role="form" id="form1" method="POST" ...
потому что в шаблоне emmet есть идентификатор (см. ниже)
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
.String
переименован в Text
для поддержки PHP 7 (String — зарезервированное ключевое слово в php7).