fivelab / resource
应用简单资源和服务序列化系统
Requires
- php: ~8.0
- symfony/event-dispatcher: ~5.4 | ~6.0
- symfony/property-access: ~5.4 | ~6.0
- symfony/serializer: ~5.4 | ~6.0
Requires (Dev)
- escapestudios/symfony2-coding-standard: ~3.5
- phpmetrics/phpmetrics: ^2.0
- phpstan/phpstan: ~1.10.0
- phpunit/phpunit: ~9.5
README
#StandWithUkraine资源系统
为您的应用程序添加处理资源的功能,并将这些资源序列化为任何格式。
支持格式
要求
- PHP 7.4 或更高版本
安装
在您的 composer.json 中添加 Resource 包
{ "require": { "fivelab/resource": "~2.0" } }
现在运行以下命令让 composer 下载库:
php composer.phar update fivelab/resource
问题
更多网络应用程序使用具有不同结果结构的 API(应用程序编程接口)。对于开发者和使用此 API 的客户端来说都很困难,因为每个开发者都可以返回任何数据(JSON 或 XML)。而且在更多情况下,应用程序不支持媒体类型,并以任何 Content-Type
头返回 JSON 数据。
在大多数情况下,开发者使用数据库中的真实实体来映射到 JSON(例如 symfony/serializer
)。这项工作很有趣,因为后端应用程序中的一个实体可以代表给客户端的许多资源。例如:我们有一个包含更多数据的 User
实体。如果用户已认证,我们必须返回所有数据,但如果用户未登录,我们必须返回更少的数据(例如 id
和 avatar
)。是的,更多的人说我们有一个组系统,但如果我说我们应该有超过 100 个组呢?是的,在大型应用程序中这是真实的情况。
在这个库中,我们试图解决与 API 相关的所有问题。
注意:我们不谈论
API
,我们必须谈论Resource
,因为所有操作(创建、编辑、删除等)都是在单个资源上执行的(例如Blog
)。
解决方案
- 数据库中的模型和表示资源之间的完全隔离。通过
Assembler
将数据库中的模型转换为资源。例如:从Blog
到BlogResource
。通过这种方式,我们可以为数据库中的单个模型创建任何资源。例如:对于Blog
,我们有BlogResource
、PremiumBlogResource
、HotBlogResource
等。我们不使用组系统来区分,我们为每个资源都有一个单独的 assembler。 - 我们完全支持 媒体类型(
Content-Type/Accept
)。如果客户端接受json
,我们返回json
,如果客户端接受xml
,我们返回xml
(但之前我们必须配置它)。而且——一个资源,多种格式;)
注意:在我们的库中,我们使用
symfony/serializer
并自定义了 normalizers 和额外的功能。结果,您自定义的 normalizers/denormaizers 将与我们的库正常工作。
许可证
此库受 MIT 许可证的保护。请参阅库中的完整许可证。
LICENSE
开发
为了方便开发,您可以使用我们的 Dockerfile
。
docker build -t fivelab-resource . docker run -it -v $(pwd):/code fivelab-resource bash
运行 docker 容器后,请安装 vendors。
composer install
报告问题或功能请求
问题和功能请求在 Github 问题跟踪器 中跟踪。
贡献者
感谢所有参与这个资源库开发的 参与者!