deozza / philarmony-core-bundle
一个用于在Symfony 4上快速创建模块化REST API的包
Requires
- php: ^7.1.3
- ext-ctype: *
- ext-iconv: *
- alcaeus/mongo-php-adapter: ^1.1
- deozza/philarmony-utils: ^3.0
- deozza/response-maker-bundle: ^1.0
- doctrine/mongodb-odm-bundle: ^3.5
- jms/serializer-bundle: ^3.2
- nelmio/cors-bundle: ^1.5
- ramsey/uuid-doctrine: ^1.5
- scienta/doctrine-json-functions: ^4.0
- symfony/dotenv: 4.2.* || 4.3.*
- symfony/flex: ^1.1
- symfony/form: 4.2.* || 4.3.*
- symfony/orm-pack: ^1.0
- symfony/translation: 4.2.* || 4.3.*
- symfony/validator: 4.2.* || 4.3.*
- symfony/yaml: 4.2.* || 4.3.*
Requires (Dev)
- deozza/philarmony-api-tester-bundle: ^3.0
- doctrine/doctrine-fixtures-bundle: ^3.2
- firebase/php-jwt: ^5.0
- fzaninotto/faker: ^1.8
- symfony/console: 4.2.* || 4.3.*
- symfony/profiler-pack: ^1.0
- symfony/security-bundle: 4.2.* || 4.3.*
- symfony/web-server-bundle: 4.2.* || 4.3.*
Suggests
This package is auto-updated.
Last update: 2024-09-12 01:42:17 UTC
README
目录
关于
Philarmony是一个用于帮助您创建模块化REST API的包。从数据库到控制器和表单,以及授权和数据验证,您可以在几分钟内轻松管理API。
V.3.0 - 新特性
更好的性能,这就是Philarmony V3的总结。核心已经用以下方式重写
安装
假设composer已经全局安装,您可以使用以下命令进行安装
composer require deozza/philarmony-core-bundle
配置
为了在项目中使用Philarmony,您需要对其进行配置。首先,创建一个philarmony.yaml
文件,其结构如下
deozza_philarmony: directory: entity: ~ property: ~ enumeration: ~
这将用于定位数据库模式文件。默认情况下,它们被创建并存储在/var/Philarmony/
。
然后,为了使用Philarmony内嵌的服务,例如控制器和存储库,您需要在您的/config/services.yaml
和config/routes/annotations.yaml
中启用它们
services: Deozza\PhilarmonyCoreBundle\Controller\: resource: '@DeozzaPhilarmonyCoreBundle/Controller' tags: ['controller.service_arguments'] Deozza\PhilarmonyCoreBundle\Repository\: resource: '@DeozzaPhilarmonyCoreBundle/Repository' tags: ['doctrine.service_entity']
philarmony_controllers: resource: '@DeozzaPhilarmonyCoreBundle/Controller' type: annotation prefix: /
最后,为了在查询中使用过滤器,您需要在doctrine.yaml
配置文件中添加以下功能
doctrine: orm: dql: string_functions: JSON_EXTRACT: Scienta\DoctrineJsonFunctions\Query\AST\Functions\Mysql\JsonExtract JSON_UNQUOTE: Scienta\DoctrineJsonFunctions\Query\AST\Functions\Mysql\JsonUnquote
使用示例
在这个示例中,我们的API示例将管理度假租赁。用户可以创建租赁报价、预订假期并通过内部消息服务进行交流。
因此,数据库将包含4种不同的实体类型
offer
:包含有关租赁报价的所有信息booking
:包含有关预订及其关联报价的所有信息conversation
:包含两个用户之间的所有消息message
:包含消息内容及其它相关信息
这些实体在默认的entity.yaml
配置文件中定义,其属性在property.yaml
文件中。
以下是一个使用JSON体(在JSON中)创建新的租赁报价的cUrl请求示例
curl --header "Content-Type: application/json"
--request POST
--data '{"title": "Stunning appartment in Tokyo", "description": "Located in central Tokyo. 2 bedrooms, bathroom, wifi.", "price": 82, "place_category":"appartment"}'
http://www.mysuper.app/api/entity/offer
如您所见,您在URL中指定了要发布的实体类型。这将允许Philarmony根据您在yaml
配置文件中实现的业务逻辑以及您的业务逻辑来调整API的行为。以下是您从上一个请求中期望的JSON响应
{ "uuid": "00100000-0000-4000-a000-000000000000", "kind": "offer", "owner": "00100000-0000-4000-a000-000000000000", "date_of_Creation": "2019-01-01T12:00:00+02:00", "properties": { "title": "Stunning appartment in Tokyo", "description": "Located in central Tokyo. 2 bedrooms, bathroom, wifi.", "price": 82, "place_category": "appartment" } }
假设一个报价可以有多个描述,您想添加另一个,只需发送如下请求
curl --header "Content-Type: application/json"
--request POST
--data '{"description": "Animals are allowed"}'
http://www.mysuper.app/api/offer/00100000-0000-4000-a000-000000000000/description
以下将是预期的响应
{ "uuid": "00100000-0000-4000-a000-000000000000", "kind": "offer", "owner": "00100000-0000-4000-a000-000000000000", "date_of_Creation": "2019-01-01T12:00:00+02:00", "properties": { "title": "Stunning appartment in Tokyo", "description": [ "Located in central Tokyo. 2 bedrooms, bathroom, wifi.", "Animals are allowed" ], "price": 82, "house_category": "appartment" } }
响应
当您对Philarmony执行请求时,它将始终发送一个包含序列化JSON和一个上述HTTP状态码的响应。
工作原理
数据库模式
您的数据库模式完全由3个yaml文件设计。
实体
实体可以被视为MySQL表,是数据的容器。默认情况下,它由所有者(创建实体的用户)、类型、创建日期及其属性定义。
属性
属性可以被视为MySQL列,是特定数据的容器。默认情况下,它由类型、unique
参数和required
参数定义。
枚举
枚举是属性处理的可能值的列表。
验证状态
验证状态用于断言实体处于良好的使用状态。每个状态定义了特定用户可用的特定方法。
授权
为了确保正确的用户正在操作资源,授权由验证状态处理。它决定了哪些用户可以发送不同的请求。
约束
为了从一个状态过渡到下一个状态,实体及其数据必须根据约束有效。
冲突规则
冲突规则是一个需要开发和不能添加到配置文件的定制和高级约束。
测试
已经开发了一个演示应用程序,可在此处查看。通过该应用程序的测试,我们确保Philarmony的每个功能都经过测试,并保证包的稳定性。
路线图
- 数据库迁移:目前,当你删除或更新属性或实体时,你需要手动处理迁移。为了获得更好的体验,我正在考虑一种自动解决方案。