我目前正在使用API平台在Elasticsearch中显示一些数据。这很好用,但我现在有了另一个我正在考虑的特性。
我的应用程序需要处理第三方API,该API需要访问端点并返回一些数据。
在我的应用程序中,我希望能够点击(/api/logistics/{action} -其中操作是一个端点,例如登录),然后点击我的应用程序层并返回数据(第三方可以重命名)
对第三方的API调用没有问题,但我不确定如何显示响应。
我见过https://api-platform.com/docs/core/data-providers/,它看起来像是我可以创建一个自定义响应。
我是否仍然需要创建一个实体/模型并使用使用我的数据提供程序的控制器来配置@ApiResource()?
如果是这样,那么我需要在我的注释中添加什么,因为我没有id标识符
我是API平台的新手,以前也没有使用过数据提供程序功能
我不会存储来自第三方API的数据,只是做一个HTTP调用,检索响应,并希望通过Api平台显示它
谢谢
发布于 2020-11-06 21:36:00
你对数据提供者的看法是正确的。但正如文档页面General Design Considerations所述,“您必须编写一个简单的老PHP对象(POPO)来表示端点的输入和输出。这是一个用@ApiResource注解标记的类。这个类不必与Doctrine ORM或任何其他持久性系统进行映射。”
所以不需要,它不需要是一个实体,但是必须有一个标有@ApiResource注解的类(但是把它放在实体文件夹中可能有助于让@ApiResource()标签工作-或者在api/config/package/api_platform.yaml中添加你的类的文件夹)。
对于一个"get“端点,你的POPO需要一个id。poperty或者如果只有一个getter,getter -必须用@ApiProperty(identifier=true)标记。通常,最简单的方法是从外部api调用的响应中内爆/编码一些字符串,这些字符串对于响应是唯一的,不会改变。您的数据提供程序必须分解/解码id,并使用组件进行外部api调用。
对于"post“操作,你需要一个datapersister而不是一个数据提供者。Apip将实例化和填充您的POPO,并将其传递给datapersister,从那里您可以调用外部api并返回一个对象作为结果。如果您的对象不是POPO的同一类型,您应该指定" output "= TheOutputClass ::class,或者将操作放在输出类上并指定"input"= TheInputClass ::class (用实际的类名替换TheOutputClass或TheInputClass)
对于"put“和"patch”,你需要一个数据提供者,一个数据姐妹和一个id。它们可以有不同的输入和输出类,请参阅有关DTO的文档。
带有"get“方法的集合操作可能看起来很方便,因为您可以向它传递任何查询字符串,但您的CollectionDataProvider必须返回一个迭代值。
https://stackoverflow.com/questions/60379585
复制相似问题