当前位置: 首页 > 知识库问答 >
问题:

具有自定义请求正文的 API 平台自定义资源

壤驷俊逸
2023-03-14

我对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 数据。有没有办法以某种方式访问这些数据,然后处理它。

共有1个答案

翟卓君
2023-03-14

首先,考虑item的操作指定与单个资源交互的endpoint。而收集操作指定与整个资源集合交互的endpoint。听起来您的endpoint应该在收集操作下配置,因为您正在寻求返回过滤的资源集合,而不是单个资源。

其次,集合< code>GET操作期望请求体有效负载以提供集合过滤器是不常见的。这些通常使用查询参数来提供。API平台附带了许多现成的查询参数过滤器,涵盖了大多数用例(包括您的用例)。否则,使用扩展来进行更加定制和复杂的集合过滤。

最后,数据转换器允许您控制如何将输入(请求负载)转换为资源,或者如何将资源转换为输出(响应负载)。这似乎是你正在寻找的。然而,我建议在走这条路之前考虑一下我前面的观点。

 类似资料:
  • 如何将自定义标头添加到HttpClient请求?我使用方法发布JSON。我需要添加的自定义标题是 这是我到目前为止所做的:

  • JustAuth (opens new window)发展到现在,基本上已经涵盖了国内外大多数知名的网站。JustAuth (opens new window)也一直以它的全和简,备受各位朋友的厚爱、支持。 但现在OAuth技术越来越成熟,越来越多的个人站长或者企业都开始搭建自己的OAuth授权平台,那么针对这种情况,JustAuth (opens new window)并不能做到面面俱到,无法去

  • 我需要为WordPress提供一个插件,该插件将具有很少的自定义APIendpoint,并且我已经安装了这两个插件 WordPress REST API V2 JWT-Auth 我已经创建自定义终端节点: 我需要保护这个endpoint,以便只有那些发送了JWT令牌的请求(通过发送用户名和密码 /wp-json/jwt-auth/v1/tokenendpoint生成)才能被处理,否则它应该返回40

  • 更新时间:2019-05-21 15:27:30 节点简介 自定义API节点可以让开发者在服务中调用自己实现的http/https接口,并将接口的返回值作为节点的输出。 使用场景 如果您需要在您开发的服务中调用自己实现的http/https接口,那么您就需要使用到自定义API节点作为服务的中间逻辑节点。 配置项 1、节点名称 2、请求方式:默认为POST,支持POST、GET 3、API 地址:

  • 注意:TPR已经停止维护,kubernetes 1.7及以上版本请使用CRD。 自定义资源是对Kubernetes API的扩展,kubernetes中的每个资源都是一个API对象的集合,例如我们在YAML文件里定义的那些spec都是对kubernetes中的资源对象的定义,所有的自定义资源可以跟kubernetes中内建的资源一样使用kubectl操作。 自定义资源 Kubernetes1.6版

  • 问题内容: 我想知道是否可以通过添加自定义信息来配置所有$ http请求标头。像config这样的东西: 但是对于所有$ http呼叫,我将使用不同的服务。我敢肯定有一个解决方案:D。谢谢 问题答案: 您可以创建一个拦截器来扩展标题: