如果我必须为内部 API 和外部(公共(API 创建不同的方法,我应该如何正确组织控制器。
变种:
- 不划分控制器:[模型]控制器将具有两个 API 的方法;
- 为所有外部请求创建一个控制器:PublicApiController
- 按用途划分每个控制器:[模型]控制器,[模型]公共控制器
- 除以其他东西,如PublicReadController,PublicWriteController等。
我问它的原因是美学和代码可扩展性以及前景的可读性。
由于您可以在Controllers
中创建任意数量的文件夹,因此我在项目中实际做的是:
/Http/Controllers
| - V1
| - Internal
| - UsersController
| - ProductsController
| - UploadsController
| - BackupController
| - External
| - Auth
| - PasswordController
| - ResetController
| - DashboardController
| - UsersController
| - ProductsController
* V1 是可选的。我喜欢它,以便将来我可以更改为 V2 并在需要时更换一些控制器
通过这样做,您可以让路由组加载不同的命名空间/中间件,以便为每组控制器提供正确的身份验证。然后,每个控制器将只专注于要做的几件事,漂亮、整洁且可扩展。
然后,我将我的业务逻辑放在一个文件夹中,app/Services
并将我的所有业务逻辑写入其中,因此这会产生瘦控制器和瘦模型。控制器只不过是使用服务、路由请求和响应的地方。
根据经验,我喜欢遵循控制器没有任何自定义方法的模式。因此,您最终会得到许多非常薄的控制器,因此我将分解控制器以仅处理通用的 RESTful 资源方法,如 index
update
store
destroy
show
。我不会专注于将模型层与控制器层耦合。
例如:如果我们有一个更新用户个人资料图像的端点而不是UserController@updateImage
这种结构,我们/User/ImageController@update
因此始终坚持使用通用方法。