0.2.2 2017-11-16 13:36 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:14:43 UTC


README

Fakend 提供由 JSON 模式生成的模拟 API。它是用 PHP 编写的,基于几个优秀的 PHP 库,如 thephpleague 的 fractal[1]、fzaninotto 的 faker[2] 和 memio 的 generator lib[3]。

  1. https://github.com/thephpleague/fractal
  2. https://github.com/fzaninotto/Faker
  3. https://github.com/memio/memio

它原本是为了提供针对 ember-data 的模拟 API 而设计的,但这次更新将模型表示从 ember-data 模型更改为全局 JSON 表示法,以提供更灵活的模拟 API 后端,适用于所有前端应用程序。

如何获取

# Install Fakend
curl -s https://osmanorhan.github.io/fakend/install.php | php
快速查看

Fakend Install Gif

如何为 Fakend 定义模型

首先,您需要生成模型文件。您必须将模型文件放置在 /api/Models/ 目录中,然后您需要添加类属性,如下所示

post.js

{
    "attrs": [
        {
            "fieldName": "title",
            "attributeType": "title",
            "parameters": {"length":4}
        },
        {
            "fieldName": "body",
            "attributeType": "description",
            "parameters": {"length":200,"html":true}
        },
        {
            "fieldName": "tag",
            "attributeType": "random",
            "parameters": {"values": ["human","robot","android"]}
        },
        {
            "fieldName": "date",
            "attributeType": "date",
            "parameters": {"from":"-4 year","to":"+1 year"}
        },
        {
            "fieldName": "count",
            "attributeType": "numberBetween",
            "parameters": {"min":10,"max":1000}
        },
        {
            "fieldName": "url",
            "attributeType": "url",
            "parameters": "{}"
        }
    ],
    "belongsTo": [
        {
            "fieldName": "author",
            "attributeType": "author",
            "parameters": {"required":true}
        }
    ],
    "hasMany": [
        {
            "fieldName": "comments",
            "attributeType": "comment",
            "parameters": {"required":false}
        }
    ]
}

解决 belongsTo

author.js

{
    "attrs": [
        {
            "fieldName": "firstName",
            "attributeType": "firstName",
            "parameters": {}
        },
        {
            "fieldName": "lastName",
            "attributeType": "lastName",
            "parameters": {}
        },
        {
            "fieldName": "avatar",
            "attributeType": "imageURL",
            "parameters": {"type":"avatar","required":false}
        }
    }
}

解决 hasMany

comment.js

{
    "attrs": [
        {
            "fieldName": "comment",
            "attributeType": "description",
            "parameters": {"length":50}
        }
    },
    "belongsTo": [
        {
            "fieldName": "post",
            "attributeType": "post",
            "parameters": {"required":true}
        }
    ]
}

参数

如何生成模型类

首先,在安装过程中第一步已生成 "parser" 可执行符号链接。当您导航到根目录文件夹时,您可以执行以下命令以生成模式文件。

php parser generate [modelName]

如果您不提供 modelName,Fakend 将为所有模型生成 PHP 模式类。 modelName 是要生成/更新单个模型文件的单一模型名称。

#Example command
php parser post.js

这将生成 /api/Schema/Post.php,并包含模型的属性。

如何使用

Fakend 在 api/ 目录中附带基本 silex 应用程序,每个 Fakend 提供的 CRUD 方法(GET/POST/PUT/DELETE)端点都将生成并放置在此文件中。新端点将添加到该文件的末尾。

如果您想优化或更改方法,您可以使用以下方法。在 index.php 中

use Fakend\FakendFactory;

这添加了 Fakend 基类。

Fakend 使用 League 的 Fractal 库进行序列化。您可以使用以下默认 Fractal 序列化器,或者您可以使用自己的自定义序列化器类来格式化您的响应数据。

use League\Fractal\Serializer\JsonApiSerializer;
use League\Fractal\Serializer\DataArraySerializer;
use League\Fractal\Serializer\ArraySerializer;

项目已添加一个基本的自定义 .NET Web API 序列化器作为示例。

use Fakend\Presentation\Serializers\WebApiSerializer;

然后,您需要初始化相关模型类并传递序列化器。

$post = FakendFactory::create('post');
$post->setSerializer(new JsonApiSerializer());
$return = $post->setMeta(array('totalCount' => 11))->getMany(5);

$post 变量,您可以调用

Docker

我们在根目录提供了一个 PHP & NGINX Docker 容器。您只需构建 & up。

Silex 示例

$app->match('/posts', function(Request $request) use ($app) {
    if($request->getMethod() == 'OPTIONS') {
        return new Response('', 200);
    }
    $post = FakendFactory::create('post');
    $post->setSerializer(new JsonApiSerializer());
    $return = $post->setMeta(array('totalCount' => 11))->getMany(5);
    return new Response($return, 200, array(
        'Content-Type' => 'application/json',
    ));
})->method('GET|OPTIONS');
$app->match('/posts/{id}', function($id, Request $request) use ($app) {
    if($request->getMethod() == 'OPTIONS') {
        return new Response('', 200);
    }
    $post = FakendFactory::create('post');
    $post->setSerializer(new JsonApiSerializer());
    $return = $post->get($id);
    return new Response($return, 200, array(
        'Content-Type' => 'application/json',
    ));
})->method('GET|OPTIONS');
$app->match('/posts/{id}', function($id, Request $request) use ($app) {
    if($request->getMethod() == 'OPTIONS') {
        return new Response('', 200);
    }
    $return = json_encode(array());
    return new Response($return, 200, array(
        'Content-Type' => 'application/json',
    ));
})->method('DELETE|OPTIONS');

您可以在 samples/ 文件夹中找到此示例的示例输出。