Create custom entrypoint without entity
使用 Api-Platform,公开 Doctrine 实体非常容易并且效果很好,但我不知道如何在没有实体的情况下创建自定义入口点,只是为了调用外部服务并获取其数据或进行复杂处理
我看到了这篇文章(API 平台 - 我应该使用哪种方法来创建没有实体的自定义操作)但我不想创建 POST 方法只是为了将我的逻辑插入数据持久化器中。
如果我只想用 GET 方法创建一个入口点 /getMyCustomData 并且不传递任何参数,我该怎么办?
我查看了 swagger 装饰器,但如果我理解的话,它适用于现有实体。
- 为什么你需要 Api-Platform 呢?
-
Api 平台帮助我处理许多实体的 CRUD,但为了使 API 文档保持最新,我希望在 swagger 文档中记录这个入口点。就像 Mattin 回答的那样,我可以创建一个控制器,但这样做不要在 swagger 文档中添加入口点。如果它是正确的解决方案,我没有找到 Action-Domain-Responder 示例
你可以在 Symfony 中创建一个普通的控制器。
1 2 3 4 5 6 7 8 9 10 11
| /**
* @Route("/getMyCustomData", methods={"GET"}, name="my_api_custom_data")
* @param Request $request
* @return Response
*/
public function getMyCustomDataAction(Request $request): Response
{
/** your code **/
} |
- api-platform.com/docs/core/controllers/... => 注意:不鼓励在 API 平台上使用自定义控制器。并且这样做不要在 API 的 swagger 文档中添加路由
-
它并不气馁。如您所见,我在您发布的文档中提到了操作类。尽管如此,除了创建自定义控制器之外,没有其他方法可以做到这一点。唯一的副作用是此端点不在 swagger/openapi 文档中,但如果需要,您可以手动添加它。顺便说一句,对于 API 文档/测试/模拟,我建议使用邮递员或 apiary ...您只需从 api-platform 获取 openapi 导出,将其放在那里并添加您的自定义路由(一切都可以在 CI 期间自动化)。
-
顺便说一句,要明确实施 api-paltform。您可以为其添加前缀,例如 api.myapi.com/api,以便所有 api 平台端点都在此前缀之后,然后对于自定义端点,您可以使用 api.myapi.com/getMyCustomData 或使用前缀。我将 api-platform 仅用于 crud 和 react-admin,但后端也用于移动应用程序,并且他们正在使用其他路由,一切都很好地协同工作:)。
-
正如我所提到的,您可以覆盖 swagger/openApi 规范(用于添加您的自定义端点)。请参阅 api-platform.com/docs/core/swagger/...
-
谢谢您的回答。我终于做了你说的并创建了一个招摇的装饰器。
-
@Mattin 在哪里可以找到使用装饰器方法的 POST 操作的完整示例?我似乎做错了,我在做示例正文请求时遇到了麻烦