【问题标题】:Api Platform - returning data from external APIApi Platform - 从外部 API 返回数据
【发布时间】:2020-06-08 07:11:31
【问题描述】:

我目前正在使用 API 平台在 Elasticsearch 中显示一些数据。这很好用,但我现在正在研究另一个功能。

我的应用程序需要处理需要访问端点并返回一些数据的第 3 方 API。

在我的应用程序中,我希望能够点击(/api/logistics/{action} - 其中操作是一个端点,例如登录)然后这会点击我的应用程序层并返回数据(第 3 方可以重命名)

对第 3 方的 API 调用正常,但我不确定如何显示响应。

我看到https://api-platform.com/docs/core/data-providers/ 看起来我可以创建自定义响应。

我是否仍需要创建实体/模型并使用使用我的数据提供程序的控制器配置 @ApiResource()

如果是这样,那么我需要在注释中添加什么,因为我没有id 标识符

我是 API 平台的新手,之前没有使用过数据提供者功能

我不会存储来自第 3 方 API 的数据,只是进行 HTTP 调用,检索响应并希望通过 Api 平台显示它

谢谢

【问题讨论】:

    标签: api-platform.com


    【解决方案1】:

    您对数据提供者的看法非常正确。但正如文档页面General Design Considerations 所述,“您必须编写一个普通的旧 PHP 对象 (POPO) 来表示您的端点的输入和输出。这是用 @ApiResource 注释标记的类。这个类没有必须使用 Doctrine ORM 或任何其他持久性系统进行映射。”

    所以不,它不需要是实体,但必须有一个标有 @ApiResource 注释的类(但将它放在实体文件夹中可能有助于使 @ApiResource() 标记工作 - 或添加api/config/packages/api_platform.yaml 中你的类的文件夹)。

    对于项目“获取”端点,您的 POPO 需要一个 id。属性——或者如果只有一个吸气剂,吸气剂——必须用@ApiProperty(identifier=true) 标记来标记。通常最简单的方法是通过对外部 api 调用的响应中的一些字符串进行内爆/编码,这些字符串对于响应来说是唯一的并且不会改变。您的数据提供者必须分解/解码 id 并使用组件进行外部 api 调用。

    对于“发布”操作,您需要 datapersister 而不是数据提供者。 Apip 将实例化并填充您的 POPO 并将其传递给 datapersister,然后您可以从那里调用外部 api 并返回一个对象作为结果。如果您的对象不是同一类型的 POPO,您应该指定 "output"=TheOutputClass::class 或将操作放在输出类上并指定 "input"=TheInputClass::class (将 TheOutputClass 或 TheInputClass 替换为实际类名)

    对于“put”和“patch”,您需要 dataprovider、datapersister 和 id。它们可以有不同的输入和输出类,请参阅有关 DTO 的文档。

    使用“get”方法的集合操作可能看起来很方便,因为您可以将任何查询字符串传递给它,但您的 CollectionDataProvider 必须返回一个可迭代对象。

    【讨论】:

      猜你喜欢
      • 2020-07-28
      • 2023-02-15
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 2018-08-05
      • 2019-11-24
      相关资源
      最近更新 更多