【问题标题】:Handling errors in API处理 API 中的错误
【发布时间】:2016-09-17 13:34:32
【问题描述】:

我知道以前有人问过这个问题,但我正在寻找针对我的具体情况的答复。本质上,我已经构建了一个 API。此 API 有一个不受保护的登录路径

Route::post('login', 'Auth\AuthController@login');

我正在使用 JWT 进行身份验证,并且此登录路径需要电子邮件和密码。该函数如下所示

public function login(Request $request) {
    $credentials = $request->only('email', 'password');

    try {
        if (! $token = JWTAuth::attempt($credentials)) {
            return response()->json(['error' => 'invalid_credentials'], 401);
        }
    } catch (JWTException $e) {
        return response()->json(['error' => 'could_not_create_token'], 500);
    }

    return response()->json(compact('token'), 200);
}

因此,如果凭据错误,则返回 401。如果应用程序无法创建令牌,则返回 500 响应。如果令牌创建成功,则返回 200。

从一开始这看起来还不错。我的问题是是否有必要采取进一步措施?例如,如果我注释掉路由,使其理论上不再存在,Postman 会返回 Laravel 错误

NotFoundHttpException in RouteCollection.php line 161:

现在我的路由消失的可能性很小,但是如果服务器出现故障或其他情况会发生什么?我是否希望向 API 用户显示 Laravel 错误,或者有什么方法可以处理这个问题?

真的,我正在寻找有关在我的 API 中处理错误的最佳方法的建议。

谢谢

【问题讨论】:

  • 我听不懂你的问题?这里有什么问题?此外,如果服务器宕机,Laravel 宕机,你需要一些低级别的错误处理。
  • 我真的很想处理所有不同类型的错误。例如,我给出了错误的路由,它在 postman 中显示 Laravel 错误。
  • Laravel 默认有一个非常好的错误处理程序,可以处理几乎所有的错误。这是一个非常广泛和自以为是的问题。请阅读有关如何提问的指南。

标签: laravel laravel-5.2


【解决方案1】:

crate API 的最佳方式 在 routes.php 中添加路由

 'api' => 'APIController',

在APIController.php中添加登录api

 public function postLogin(Request $request)
    {
    $response = "";
    $error_message = "";

    $request->headers->set('content-type','application/json');
    $request_data = $request->all();

    $validator = $this->user_service->api_login_rules($request_data);
        if($validator->fails())
    {
      $errors = $validator->getMessageBag()->toArray();
      if(isset($errors['email']))
      {
        $error_message = $errors['email'][0];
      }
      else if(isset($errors['password']))
      {
        $error_message = $errors['password'][0];
      }      
      $response = ['code' => 100, 'error-message' => $error_message];  
      return response()->json(['error' => $response]);      
    }
    else
    {
      $email = $request_data['email'];
      $password = $request_data['password'];

      if (Auth::attempt(['email' => $email, 'password' => $password]))
      {
        $user_details = $this->user_service->getUserDetails($user_id);
        return response()->json($response, 200, [], JSON_NUMERIC_CHECK);
      }
      else
      {
        $error_message = "Please enter correct password";
        $response = ['code' => 100, 'error-message' => $error_message];  
        return response()->json(['error' => $response]);
      } 
    }        

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2018-10-24
    相关资源
    最近更新 更多