【发布时间】:2017-08-20 08:12:51
【问题描述】:
我有一些关于正确组织 API 应用程序的相关基本问题。虽然这是一个普遍的问题,但我使用 Laravel 可能会很有趣。
我的结构如下:
- 一个rest api,其端点指向控制器类中的不同方法。传递的对象是 Request 类型。
- 控制器类执行所有输入验证(通过验证方法)、授权(通过 Gates)并从数据库中获取相应的模型(基于请求中的 id)。如果模型不存在,则返回错误。最后,控制器调用我的服务类中的相应方法,传递模型对象。
- 服务类现在对模型实例执行不同的操作(例如更新用户名)、持久化更新(使用 Eloquent)并最终将更新的模型实例返回给控制器。
- 控制器将返回的对象“包装”成 json 响应并将其返回给客户端(我只是喜欢返回整个更新后的对象,而不是只返回成功或 id)。
我的问题和问题:
- 我的代码组织正常吗?
- 如上所述,验证错误等是从我的控制器中抛出的。但是,如果我的服务中出现问题(即进一步下降)怎么办?如何告诉我的控制器出现问题,以便它可以向客户端返回 403(例如)JSON 响应?示例:我的 UserService 尝试更新电子邮件地址。但是,这封邮件中已经有一个条目,因此 Service 需要将错误返回给控制器,然后控制器将 403 json 编码的错误消息返回给客户端。
- 如上所述,所有验证、授权等都在我的控制器中完成。控制器方法是专门为 http 请求制作的,因此将 Request 对象作为输入并返回 json。如果我想直接从我的应用程序中(例如从另一个控制器)调用这些方法怎么办?如果我直接调用相应的服务类,我无法从控制器内完成的所有验证和检查中受益。但是,如果我调用控制器,它需要一个 Request 对象作为输入并返回一个 Json http 响应,显然,当从另一个控制器调用时,我都不想这样做。我该怎么做?
我希望我的问题足够清楚!?非常感谢任何帮助。
谢谢, 迈克尔
【问题讨论】:
标签: laravel api structure code-structure