快速提问,Eloquent:API资源和Fractal有什么区别?
在我看来,这是一样的东西吗?
答案 0 :(得分:4)
两者均用于转换API json响应以标准化响应结构。
但是,Laravel内置了API资源,并且非常易于使用。当不在Laravel中构建API资源时,分形是首选的方法。分形具有一些方法,与API资源相比,它几乎没有扩展性。
但是,如果您考虑核心功能,则两者在语法语法上是相同的。
大多数分形中的事情,您现在都可以在Laravel中原生完成。加上API资源,无需进行任何额外的安装和设置。 API资源中的命名很容易以
开头答案 1 :(得分:1)
它们都是为一项工作创建的,但是它们的解决方案在许多方面都不同。
关系:
在分形中,您可以轻松地将相关模型添加到响应中。此外,您还可以控制何时在响应中显示相关模型。 (默认包含与可用包含)
例如,您的客户可以在需要时使用?include=rate
从文章中获取费率模型!考虑到这一点,当您忘记加载分形时,它会渴望加载您的关系。
在API资源中,您无法控制关系,因此您应该首先决定是否具有关系。否则,如果您忘记了急于加载数据,则将花费太多查询来加载相关模型(1 + n问题)。
序列化器
在api资源的基本用法中,您无法控制数据如何映射到最终响应。
例如,如果您希望对回复做出jsonnapi规范,则应该自己管理所有作品。但在分形中,您首先拥有它。
作为结论 我建议您在这种情况下使用分形。 (或将dingo包用于api,但要考虑dingo的复杂性!)