如何组织Symfony 3 Code以使用复杂的JSON API端点?

时间:2017-11-25 01:22:30

标签: php rest api symfony architecture

我目前正在研究一个在Symfony 3上有一些复杂商业逻辑的项目。

我想使用JSON API在我的前端和后端之间提供通信。以前,我开发了设计非常糟糕的API,并没有考虑如何最好地处理它们,例如,当我有(例如)时

/ resource?include = field1,field2

我在我的Controller Action中解析了这些包含的字段。因此,经过一段时间后,应用程序的代码总是难以阅读,重用和维护。

但现在我对处理查询的最佳做法感兴趣,例如:

/用户字段[用户] = ID,名字,姓氏,avatar_src&安培;包括=评论&安培;字段[注释] =作者,文本,likes_count,reposts_count,created_at&安培;排序= -comments.created_at&安培;过滤[使用者] [REGION_ID] = 3

应用程序中有更多资源,每个资源提供许多不同的字段(其中一些需要处理要检索的MySQL连接),排序,过滤器。此外,每个资源都可以使用包含查询参数进行扩展,以指定我们希望获得其他资源。

我想以某种方式集中解析传入请求的一种EventListener,它将收集所有数据,将其映射到Doctrine Entities并构建某种DQL Schema。控制器操作将捕获它以返回响应。

我应该试试吗?或许这也是一个非常糟糕的解决方案?你能推荐一些关于如何正确处理这件事的事吗?

1 个答案:

答案 0 :(得分:0)

我得到的印象是,您正试图将您的API转换为“SQL over HTTP”之类的内容。由于可选参数的数量,这显然会产生一些clusterfuck。

  

您可能应阅读this article并观看指定主题的this lecture

我个人更喜欢端点总是返回相同的字段并使用参数,当我需要expand这些字段中的一个(或多个)时,或者当端点包含集合并且我想要过滤/时对结果进行分页。

这样,用户请求的“解析”变得更加简单。

看起来,“include”字段为用户提供了一种在DAL中访问并直接表达持久性的方法。你最终会泄漏抽象层。