php - 具有自定义请求正文的 API 平台自定义资源
问题描述
我对 Symfony 和 API 平台还很陌生。我正在尝试创建一个自定义资源/操作,它接收请求的主体,根据值从数据库中获取数据,然后将实体的集合返回给客户端。
示例:GET
具有以下正文的请求:
{
"trackName": "example"
"anotherKey": "anotherValue"
}
根据这些属性我想查询数据,做计算,然后返回数据。
我正试图弄清楚如何使这成为 API 平台的方式。我一直在谷歌搜索并在文档中寻找它几个小时,但我找不到实现这一目标的方法。
我尝试使用 aCollectionDataProvider
和这样的控制器查询数据:
/**
* @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 平台附带了许多开箱即用的查询参数过滤器,涵盖了大多数用例(包括您的用例)。否则,使用Extensions进行更多自定义和复杂的集合过滤。
最后,还有数据转换器允许您控制如何将输入(请求负载)转换为资源,或者如何将资源转换为输出(响应负载)。这似乎是您正在寻找的。但是,我建议在走这条路之前考虑我以前的观点。
推荐阅读
- html - 如何在圆形图像周围放置多色边框?
- excel - VBA代码根据单元格范围内的单元格值显示消息
- c# - 配置 NLog 以使用管理标识令牌将日志写入 Azure SQL 服务器
- java - Selenium WebDriver 是同步还是异步打开多个选项卡?
- javascript - 表单后端失效反馈 - 在下次提交之前不再显示
- kerberos - Kerberos + GSSAPI +SASL_PLAINTEXT 的 Mirrormaker 问题
- fortran - 如何将数组传递给一个过程,该过程作为参数传递给使用 Fortran 的另一个过程
- vue.js - 是否可以在不同的 S3 存储桶中设置多个网站,在同一个域下使用 lambda @edge 设置不同的子文件夹?
- powershell - GCloud——Powershell中不等式的过滤器
- clojure - 按公共子字符串对字符串列表进行分组