微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 API 平台自定义 REST 操作的最佳实践

如何解决使用 API 平台自定义 REST 操作的最佳实践

10 年前的

This top-ranking Stackoverflow answer 建议使用 POST /users/:user_id/reset_password 启动密码重置。

我了解 API 平台 recommends against using custom operationsSymfony Messenger integration 的文档页面使用 ResetPasswordRequest 实体(带有用户名字段)。这对我来说很有意义。

假设我有一个 UserNotification 实体,可能还有一个加入的 UserNotification(带有 hasRead)实体。我想在我的 API 上公开一个端点,以将所有超过一个月的通知标记为已读。所以我可能会创建一个 ClearOldNotification 实体,再次使用用户名字段。

一个例子可能是我想要一份报告,显示由于某些条件而没有联系的 Customers。所以我想加入服务器中的表并返回一个自定义的 JSON 数据对象。我再次可以创建一个 CustomerNoContact 实体。

我看到的问题是我现在区分了实体,例如UserProduct,而不是这些服务 输入实体。

  • 这种为操作创建单个实体类方法是否是 Symfony 和 API 平台推荐的最佳实践?
  • 我是否应该在我的应用中对这些实体进行不同的命名间距(或其他什么)以区分它们?
  • 我可以想象在一个非常庞大而复杂的应用程序中,与实体相比,您可以拥有数百个这样的服务实体。这是预期的还是期望的?
  • 谁能推荐一些关于这种模式的好资源?

解决方法

您要求针对两个不同用例的最佳实践。让我们分解一下:

清除旧通知

我认为您已经找到了解决方案:使用 Messenger。正如您所读到的,此用例的文档中有一个示例:

#[ApiResource(collectionOperations: [
        "post","get","delete","reset_password" => ["status" => 202,"messenger" => "input","input" => ResetPasswordRequest::class,"output" => false,"method" => "POST","path" => "/users/reset_password"]
    ]
)]
final class User
{
}

ResetPasswordRequest 类是一个 Data Transfer Object (DTO)。在您的 ResetPasswordRequestHandler 中,您应该注入负责重置密码和发送电子邮件的服务。

CustomerNoContact

这可能是一个 Custom (Doctrine ORM) Filter

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。