如何解决具有自定义请求正文的 API 平台自定义资源
我对 Symfony 和 API 平台非常陌生。我正在尝试创建一个自定义资源/操作,它接收请求的正文,根据值从数据库中获取数据,然后将实体的集合返回给客户端。
示例:
具有以下正文的 GET
请求:
{
"trackName": "example"
"anotherKey": "anotherValue"
}
我正在尝试弄清楚如何使其成为 API 平台方式。我一直在谷歌搜索并在文档中寻找它几个小时,但我找不到实现这一目标的方法。
我尝试使用 CollectionDataProvider
和这样的控制器查询数据:
/**
* @ApiResource(
* itemOperations={
* "tracks_custom_endpoint"={
* "method"="GET",* "path"="/tracks/custom_endpoint",* "controller"=MyController::class,* "read"=false
* }
* }
* )
* @ORM\Entity(repositoryClass=SpotifyTrackRepository::class)
*/
class Track
{
// Attributes,setters and getters
}
但是,无论哪种方式,我都无法分别访问请求的正文和随其发送的 JSON 数据。有没有办法以某种方式访问这些数据然后处理它。
解决方法
首先,考虑 itemOperations
指定与单个资源交互的端点。而 collectionOperations
指定与整个资源集合交互的端点。听起来您的端点应该在 collectionOperations
下配置,因为您要返回过滤的资源集合,而不是单个资源。
其次,集合 GET
操作期望请求正文有效负载以提供集合过滤器是不常见的。这些通常使用查询参数提供。 API 平台随附了许多开箱即用的 query parameter filters,涵盖了大多数用例(包括您的用例)。否则,请使用 Extensions 进行更自定义和更复杂的集合过滤。
最后,Data Transformers 允许您控制如何将输入(请求负载)转换为资源,或如何将资源转换为输出(响应负载)。这似乎就是你要找的。但是,我建议在走这条路之前考虑一下我之前的观点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。