【问题标题】:How to properly organize an API-app with Laravel如何使用 Laravel 正确组织 API 应用程序
【发布时间】:2017-08-20 08:12:51
【问题描述】:

我有一些关于正确组织 API 应用程序的相关基本问题。虽然这是一个普遍的问题,但我使用 Laravel 可能会很有趣。

我的结构如下:

  • 一个rest api,其端点指向控制器类中的不同方法。传递的对象是 Request 类型。
  • 控制器类执行所有输入验证(通过验证方法)、授权(通过 Gates)并从数据库中获取相应的模型(基于请求中的 id)。如果模型不存在,则返回错误。最后,控制器调用我的服务类中的相应方法,传递模型对象。
  • 服务类现在对模型实例执行不同的操作(例如更新用户名)、持久化更新(使用 Eloquent)并最终将更新的模型实例返回给控制器。
  • 控制器将返回的对象“包装”成 json 响应并将其返回给客户端(我只是喜欢返回整个更新后的对象,而不是只返回成功或 id)。

我的问题和问题:

  1. 我的代码组织正常吗?
  2. 如上所述,验证错误等是从我的控制器中抛出的。但是,如果我的服务中出现问题(即进一步下降)怎么办?如何告诉我的控制器出现问题,以便它可以向客户端返回 403(例如)JSON 响应?示例:我的 UserService 尝试更新电子邮件地址。但是,这封邮件中已经有一个条目,因此 Service 需要将错误返回给控制器,然后控制器将 403 json 编码的错误消息返回给客户端。
  3. 如上所述,所有验证、授权等都在我的控制器中完成。控制器方法是专门为 http 请求制作的,因此将 Request 对象作为输入并返回 json。如果我想直接从我的应用程序中(例如从另一个控制器)调用这些方法怎么办?如果我直接调用相应的服务类,我无法从控制器内完成的所有验证和检查中受益。但是,如果我调用控制器,它需要一个 Request 对象作为输入并返回一个 Json http 响应,显然,当从另一个控制器调用时,我都不想这样做。我该怎么做?

我希望我的问题足够清楚!?非常感谢任何帮助。

谢谢, 迈克尔

【问题讨论】:

    标签: laravel api structure code-structure


    【解决方案1】:

    我可以回答其中一些问题。

    1. 我认为 API 看起来不错;只要确保将 API 逻辑与应用程序逻辑分开即可。我这样做的方式是通过路由;以/api/{version}/... 为例。

    2. 使用try { ... } catch { ... } 块来处理不可预见的错误(如SQL 异常等)并在这些情况下返回response()->json([...], 403);

    3. 使用guzzle/http(需要将它包含在您的composer.json 中并运行composer installcomposer update)包从您的应用程序中的路由/控制器发送请求。您可以简单地从您的应用程序访问 GETPOSTs 到 /api/... 路由的路由;它会将其识别为Request,并具有处理返回的JSON 响应的功能。有关示例,请参阅 http://docs.guzzlephp.org/en/latest/

    不过,这是一个开放式问题;最好尝试构建您的 API 并解决出现的具体问题。

    【讨论】:

    • 非常感谢,这正是我希望得到的答案!如果出现任何问题,我会尝试回来!谢谢!!!
    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 2012-09-11
    相关资源
    最近更新 更多