rozbehsharahi/fhp-rest-api

无需MySQL、Apache等,快速设置PHP-REST-API

v2.0.1 2017-02-05 22:24 UTC

This package is auto-updated.

Last update: 2024-09-29 04:31:16 UTC


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'
]);

待办事项和问题

  • 属性类型
  • 重构