mcpField
A
api-platform-serialization

api-platform-serialization

github.com/dev-toolings开发22778 次安装3 周前更新
代码仓库

关于 api-platform-serialization

面向 Symfony 的 API Platform 序列化技能,指导按操作配置字段组、关联资源呈现和计算字段,并涵盖深度限制与隐藏敏感字段等防护措施。

主要功能

  1. 01按操作配置序列化字段组
  2. 02控制关联资源以 IRI 或嵌入形式呈现
  3. 03添加计算字段和角色相关字段
  4. 04配置属性级规范化选项
  5. 05防止循环并隐藏敏感字段

适用场景

  1. 01为列表和读取操作暴露不同字段
  2. 02控制关联资源是否嵌入
  3. 03无需自定义规范化器即可设置日期格式
  4. 04在保持实体整洁的同时添加计算字段

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dev-toolings/superpowers-symfony --skill api-platform-serialization

安装后在 Claude Code 中输入/api-platform-serialization确认已加载。

附带文件reference.md

详细介绍

Api Platform 序列化(Symfony)

适用场景

  • 不同操作(列表、读取、创建、更新)需要公开不同字段。
  • 关联资源需要以 IRI 形式呈现或嵌入。
  • 响应需要计算得出或依赖角色的字段。
  • 属性需要使用日期格式等正规化器选项。

默认工作流

  1. 将分组命名为 entity:operation,并为每个操作设置 normalizationContext 和 denormalizationContext。
  2. 使用 Serializer Attribute 命名空间中的 #[Groups] 标记属性,而不是旧的 Annotation 命名空间。
  3. 使用 #[ApiProperty(readableLink: false, writableLink: false)] 控制关联,强制使用 IRI。
  4. 使用 #[Context] 设置每个属性的选项,而不是编写正规化器。
  5. 在自定义正规化器中添加计算字段,并在 api_platform.serializer.context_builder 的装饰器中添加动态分组。
  6. 使用 #[MaxDepth] 和 enable_max_depth 防止循环引用,并使用 #[Ignore] 隐藏机密信息。

防护措施

  • 使用独立的读写分组:例如,password 仅属于创建分组,id 仅属于读取分组。
  • 只有当关联资源与父资源共享一个分组时,才会嵌入该资源;否则会以 IRI 形式呈现。
  • 除非上下文中的 enable_max_depth 为 true,否则 #[MaxDepth] 不会生效。
  • 保持实体简洁:计算字段应放在正规化器中。

渐进式披露

  • 使用此文件了解执行方式和风险控制。
  • 需要深入了解实现细节时,打开参考资料。

输出约定

  • 以字段矩阵形式列出每个操作的分组和上下文。
  • 列出新增的正规化器或上下文构建器,以及它们的注册方式。
  • 提供展示最终字段的测试或 OpenAPI 输出。

参考资料

  • reference.md

评论

支持 Markdown