fivelab/resource

应用简单资源和服务序列化系统

v2.1.1 2023-06-27 12:20 UTC

This package is auto-updated.

Last update: 2024-08-27 14:48:53 UTC


README

 #StandWithUkraine 

资源系统

Build Status

为您的应用程序添加处理资源的功能,并将这些资源序列化为任何格式。

支持格式

要求

  • 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 实体。如果用户已认证,我们必须返回所有数据,但如果用户未登录,我们必须返回更少的数据(例如 idavatar)。是的,更多的人说我们有一个组系统,但如果我说我们应该有超过 100 个组呢?是的,在大型应用程序中这是真实的情况。

在这个库中,我们试图解决与 API 相关的所有问题。

注意:我们不谈论 API,我们必须谈论 Resource,因为所有操作(创建、编辑、删除等)都是在单个资源上执行的(例如 Blog)。

解决方案

  1. 数据库中的模型和表示资源之间的完全隔离。通过 Assembler 将数据库中的模型转换为资源。例如:从 BlogBlogResource。通过这种方式,我们可以为数据库中的单个模型创建任何资源。例如:对于 Blog,我们有 BlogResourcePremiumBlogResourceHotBlogResource 等。我们不使用组系统来区分,我们为每个资源都有一个单独的 assembler。
  2. 我们完全支持 媒体类型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 问题跟踪器 中跟踪。

贡献者

感谢所有参与这个资源库开发的 参与者