如何使用 Laravel 正确组织 API-app

How to properly organize an API-app with Laravel

我有一些关于正确组织 API-app 的相关基本问题。尽管这是一个一般性问题,但我使用 Laravel.

可能会引起兴趣

我的结构如下:

我的疑问和问题:

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

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

谢谢, 迈克尔

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

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

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

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

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