我想构建一个同时使用Web和API部件的Laravel应用程序。常见的(也是我的)问题是是否使用单独的控制器。
有两个选项:
使用一个控制器并检查请求类型(是Ajax,还是取决于请求链接)并返回JSON或HTML。 Laravel resource controllers for both API and non-API use
那些拥有第一意见的人没有解释DRY问题解决方案 - 除了return语句(JSON或HTML视图)之外,web和API控制器是相同的。但由于大多数帖子建议分开控制器,我怀疑我对DRY问题解决方案一无所知。
我认为第二种方法没有任何缺点。但人们会说像
如果你只使用一个控制器,你很快就会得到一个包含数千行的混乱类。这不仅不能很好地扩展,但对你和你的队友来说很难合作。
请解释第一种方法的干燥问题解决方案(单独的控制器)和第二种方法中可能存在的水下岩石(单一控制器)
请说明哪种方法更可取。
答案 0 :(得分:3)
我认为这是一个很好的问题,我也很想看到答案。
我可以看到两种方法的论据。然而,我会创建和维护单独的控制器,同时使用服务来共享控制器之间的通用逻辑,在这种情况下,控制器将永远不会发生变化。
例如,如果您允许用户上传头像图片。我会将这样的逻辑放在一个服务中并在两个控制器中使用这个服务。
在我看来,这种方法的原因是网络和API逻辑可能会分歧,因此在不影响另一方的情况下迭代每个逻辑会更容易。
如果这不太可能,那么我仍然会创建单独的路由,但是将它们指向同一个控制器,这样如果它在将来发生了变化,你可以简单地将API路由重新指向它们自己的控制器。 / p>