rozbehsharahi / fhp-rest-api
无需MySQL、Apache等,快速设置PHP-REST-API
Requires
- doctrine/common: ^2.6
- icanboogie/inflector: ^1.4
- mikey179/vfsstream: ^1.6
- phpunit/phpunit: 5.7.*
- slim/slim: ^3.7
README
描述
FHP REST API提供了一个简单的方式来设置基于JSON文件的REST API。
不依赖MySQL或其他数据库。所有文件默认存储为json文件。尽管如此,您也可以通过集成自己的控制器、实体和规范器来自定义数据保存方式。
我尽力使其非常灵活且易于理解,希望您在使用它时感到愉快。
安装
$ composer require rozbehsharahi/fhp-rest-api
如何做
以下 index.php 足以为您的应用在 /posts 路径上提供PUT、GET、POST、OPTION、DELETE路由
<?php use Fhp\Rest\Api; use Fhp\Rest\Repository\JsonRepository; use Fhp\Rest\Controller\FlexEntityController; require_once('vendor/autoload.php'); // Set json database folder JsonRepository::setDirectory(__DIR__ . '/database/'); // Api call here Api::create() ->activateEntity('post', FlexEntityController::class) // <-- use singular entity name ->run();
就这样!
如何使用实体类
(仍然处于实验阶段)
这种使用FHP REST API的方式仍然处于实验阶段,所以请谨慎使用。例如,您需要定义fhp属性类型注解,尽管它们目前对属性的保存方式没有影响。
<?php use Fhp\Rest\Api; use Fhp\Rest\Repository\JsonRepository; require_once('vendor/autoload.php'); // Set json database folder JsonRepository::setDirectory(__DIR__ . '/database/'); // Api call here Api::create() ->activateEntity(My\Example\Page::class) ->run();
您的实体类应如下所示
<?php namespace My\Example; /** * My Entity class * * @class Page */ class Page { /** * @Fhp\Rest\PropertyType\StringType */ protected $id; /** * @Fhp\Rest\PropertyType\StringType */ protected $url; public function getId() { return $this->id; } public function setId($id) { $this->id = $id; return $this; } public function getUrl() { return $this->url; } public function setUrl($url) { $this->url = $url; return $this; } }
目前,您使用的属性类型没有区别。但这为未来的版本做好了准备。您仍然需要使用以下注解之一进行注解
@Fhp\Rest\PropertyType\StringType@Fhp\Rest\PropertyType\BooleanType@Fhp\Rest\PropertyType\IntegerType
定义自定义实体控制器
您也可以定义自己的控制器来处理模型请求。只需将控制器类名作为第三个参数传递给 $api->createModel。
请扩展 Fhp\Rest\Controller 并自由地覆盖基本操作
public function indexAction($request, $response, $args) {}public function showAction($request, $response, $args) {}public function updateAction($request, $response, $args) {}public function deleteAction($request, $response, $args) {}public function createAction($request, $response, $args) {}
通过调用 $api->activateEntity 如下所示
$api->activateEntity( \My\Entity\Post::class, \My\Own\PostController::class );
无需Apache即可快速启动
无需Apache、无需MySQL,只需确保您的机器上安装了PHP。
由于FHP REST API非常独立,您几乎可以在任何支持PHP7+(未来也将支持PHP5.6+)的机器上启动服务器。甚至不需要Apache就可以启动。只需将您的目录更改为项目根目录,然后继续进行
$ php -S localhost:8000
使用Apache启动
如果您想在Apache服务器上启动FHP REST API,请将以下 .htaccess 文件添加到您的项目根目录,其中包含 index.php。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
安全问题 / CORS
FHP REST API在 Fhp\Rest\Api 中定义了一组默认头信息。这些头信息还包括 'Access-Control-Allow-Origin' => '*',这取决于项目是一个安全问题。
请确保在投入生产时配置您自己的头信息设置。
您可以通过以下方式完成此操作
$api->setHeaders([ 'Content-Type' => 'application/json', 'Access-Control-Allow-Origin' => 'http://my-specific-doain.com' ]);
待办事项和问题
- 属性类型
- 重构