Laravel Web和API控制器结构.与DRY分开

Gru*_*ruz 8 laravel

我想构建一个Laravel应用程序,它同时使用Web和API部件.常见的(也是我的)问题是是否使用单独的控制器.

有两种选择:

  1. 单独的控制器 Laravel API控制器结构?

  2. 使用一个控制器并检查请求类型(是Ajax,还是取决于请求链接)并返回JSON或HTML. 用于API和非API使用的Laravel资源控制器

那些拥有第一意见的人没有解释DRY问题解决方案 - 除了return语句(JSON或HTML视图)之外,web和API控制器是相同的.但由于大多数帖子建议分开控制器,我怀疑我对DRY问题解决方案一无所知.

我没有看到第二种方法的任何缺点.但是人们会这么说

如果你只使用一个控制器,你很快就会得到一个包含数千行的混乱类.不仅这不能很好地扩展,而且对你和你的队友来说也很难.

请解释第一种方法的干燥问题解决方案(单独的控制器)和第二种方法中可能存在的水下岩石(单一控制器)

请解释哪种方法更可取.

fub*_*bar 5

我认为这是一个很好的问题,我也很想看到答案。

我可以看到这两种方法的论据。然而,我会创建和维护单独的控制器,同时使用服务在控制器之间共享公共逻辑,而众所周知,这永远不会改变。

例如,如果您允许用户上传头像图像。我会把这样的逻辑放在一个服务中,并在两个控制器中使用这个服务。

在我看来,采用这种方法的原因是 Web 和 API 逻辑可能会出现分歧,因此更容易迭代而不影响另一个。

如果这不太可能,那么我仍然会创建单独的路由,但将它们指向同一个控制器,这样如果将来确实发生变化,您可以简单地将 API 路由重新指向它们自己的控制器。