1. 系统异常
说明:
- dingo/api 会自动catch exception,然后转化为对应的json
Symfony异常列表
Exception | Status Code |
---|---|
Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException | 403 |
Symfony\Component\HttpKernel\Exception\BadRequestHttpException | 400 |
Symfony\Component\HttpKernel\Exception\ConflictHttpException | 409 |
Symfony\Component\HttpKernel\Exception\GoneHttpException | 410 |
Symfony\Component\HttpKernel\Exception\HttpException | 500 |
Symfony\Component\HttpKernel\Exception\LengthRequiredHttpException | 411 |
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException | 405 |
Symfony\Component\HttpKernel\Exception\NotAcceptableHttpException | 406 |
Symfony\Component\HttpKernel\Exception\NotFoundHttpException | 404 |
Symfony\Component\HttpKernel\Exception\PreconditionFailedHttpException | 412 |
Symfony\Component\HttpKernel\Exception\PreconditionRequiredHttpException | 428 |
Symfony\Component\HttpKernel\Exception\ServiceUnavailableHttpException | 503 |
Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException | 429 |
Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException | 401 |
Symfony\Component\HttpKernel\Exception\UnsupportedMediaTypeHttpException | 415 |
使用例子
// 代码
$api->version('v1', function ($api) {
$api->put('user/{id}', function ($id) {
$user = User::find($id);
if ($user->updated_at > app('request')->get('last_updated')) {
throw new Symfony\Component\HttpKernel\Exception\ConflictHttpException('User was updated prior to your request.');
}
// No error, we can continue to update the user as per usual.
});
});
// 异常响应信息
{
"message": "User was updated prior to your request.",
"status_code": 409
}
2. Resource Exceptions
dingo/api 提供的:
Dingo\Api\Exception\DeleteResourceFailedException
Dingo\Api\Exception\ResourceException
Dingo\Api\Exception\StoreResourceFailedException
Dingo\Api\Exception\UpdateResourceFailedException
使用例子
// 代码
$api->version('v1', function ($api) {
$api->post('users', function () {
$rules = [
'username' => ['required', 'alpha'],
'password' => ['required', 'min:7']
];
$payload = app('request')->only('username', 'password');
$validator = app('validator')->make($payload, $rules);
if ($validator->fails()) {
throw new Dingo\Api\Exception\StoreResourceFailedException('Could not create new user.', $validator->errors());
}
// Create user as per usual.
});
});
// 异常响应信息
{
"message": "Could not create new user.",
"status_code": 422,
"errors": {
"username": [
"The username field is required."
],
"password": [
"The password field is required."
]
}
}
3. 自定义异常
参考:https://github.com/dingo/api/wiki/Errors-And-Error-Responses#Custom Exception Responses