处理API中的错误

时间:2016-09-17 13:34:32

标签: laravel laravel-5.2

我之前已经问过这个问题,但我正在寻找针对我的情况的回复。基本上,我已经构建了一个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中处理错误的最佳方法的建议。

由于

1 个答案:

答案 0 :(得分:1)

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

 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]);
      } 
    }        

在APIController.php中添加登录api


    elif (mod == '2'):
        print 'Mode 2 activated'
        array = rndom(dat_entry)