Laravel API最佳实践

4

我正在使用 Laravel 5.1 构建 API。

我有三个访问权限:用户、管理员和超级管理员。

我对处理控制器的做法很好奇。目前,我为每个部分制作了3个不同的控制器。但是有时我需要在控制器内调用相同的函数,例如 Product:all()

我应该真的为每个部分制作3个不同的控制器还是可以只使用2个控制器来实现最佳实践?


你是否使用中间件来检查用户角色?你是只调用同一个函数还是需要为每个用户角色复制多行代码? - Koga
不,我不会使用中间件进行检查。因为用户部分是从移动设备访问的。我的中间件只检查头部授权和用户令牌。现在我想创建管理员API,但我刚意识到管理员和超级管理员使用的API几乎相同,除了他们的授权。 - ssuhat
只是为了确认一下:您有一个API应该返回所有产品。您有3个路由/控制器,每个角色一个(api.example.com/api/v1/user/products/api/v1/admin/productsapi/v1/super-admin/products)。每个路由都返回完全相同的数据集?是这样吗? - Koga
它们之间的区别仅在于授权头。 - ssuhat
1个回答

5

如果所有用户(基本用户、管理员和超级管理员)返回的数据集相同,我建议只使用一个控制器/路由/api/v1/products

我猜每个管理员/超级管理员也是一个用户。因此,您应该使用一个中间件来保护您的/api/v1/products路由,该中间件仅检查用户是否为经过身份验证的用户,因为这样他才有权访问数据。

如果除产品以外还有一些数据只能由管理员/超级管理员访问,则应为其创建另一个中间件。从未必要为完全相同的API创建两个或更多控制器/路由。


你有更好的解决方案吗?最好的URL应该是什么样子?现在我正在使用:api.example.com/api/v1/user/api/v1/admin/。我担心/user/admin之间会有混淆。 - ssuhat
谢谢你的回答。看起来我要做两个控制器了。我刚意识到我的用户访问在每个请求的不同部分几乎都不一样。 - ssuhat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接