brewinteractive / fakend
Requires
- php: ^5.3.3|^7.0
- danielstjules/stringy: ~3.1.0
- fzaninotto/faker: *
- league/fractal: ~0.17.0
- memio/memio: ~2.0
- silex/silex: ~2.0
- symfony/console: *
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]。
- https://github.com/thephpleague/fractal
- https://github.com/fzaninotto/Faker
- 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 定义模型
首先,您需要生成模型文件。您必须将模型文件放置在 /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/ 文件夹中找到此示例的示例输出。
