ホームページ >バックエンド開発 >PHPチュートリアル >Laravel & Lumen RESTFul API 拡張パッケージ: Dingo API (4) -- エラーおよび例外応答

Laravel & Lumen RESTFul API 拡張パッケージ: Dingo API (4) -- エラーおよび例外応答

WBOY
WBOYオリジナル
2016-06-23 13:11:121923ブラウズ

API を構築する際のエラー処理は面倒な作業です。Dingo API では、エラー応答を手動で構築する必要はなく、SymfonyComponentHttpKernelExceptionHttpException から継承された例外をスローするだけで済み、API がこれを自動的に処理します。あなたのために。

以下は Dingo API に組み込まれている Symfony 例外です:

410405symfonycomponenthttpkernelexceptionnotac ceptablehttpexceptions 404412 symfonycomponenthtpkernelexceptiontoomanyrequestshtttpexception429symfonycomponenthttpkernelexceptionnauthorizedh ttpexceptionceptionceptionceptionsceptionsceptionsceptionsception 次の例は、他の人によって更新されたレコードを更新しようとすると、ConflictHttpException 例外がスローされます: Dingo API は、スローされた例外を自動的にキャッチして JSON 形式に変換します。 ConflictHttpException に対応する HTTP ステータス コードは 409 です。デフォルトの JSON 形式のエラー メッセージは次のとおりです。 1. 以下はリソース例外です。各例外は 422 ステータス コードを返します:
Dingo\Api\Exception\DeleteResourceFailedExceptionDingo\Api\Exception\ResourceExceptionDingo\Api\Exception\StoreResourceFailedExceptionDingo\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.    });});
Dingo API は、スローされた例外を自動的にキャプチャして JSON 形式に変換し、応答の HTTP ステータス コードも例外一致値に変更されると、リソース例外は 422 ステータス コードと次の JSON 形式のエラー メッセージを返します:
{    "message": "Could not create new user.",    "status_code": 422,    "errors": {        "username": [            "The username field is required."        ],        "password": [            "The password field is required."        ]    }}
2. カスタム HTTP 例外 カスタム HTTP 例外は、SymfonyComponentHttpKernelExceptionHttpException から継承するか実装する場合に限り、作成できます。 SymfonyComponentHttpKernelExceptionHttpExceptionInterface インターフェース。 3. カスタム例外応答 例外によって返される応答をカスタマイズする必要がある場合は、例外ハンドラーを登録できます:
app('Dingo\Api\Exception\Handler')->register(function (Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException $exception) {    return Response::make(['error' => 'Hey, what do you think you are doing!?'], 401);});
{    "error": "Hey, what do you think you are doing!?"}
4. フォームリクエスト
Exception ステータスコード
SymfonyComponentHttpKernelExceptionAccessDeniedH ttpException 403
symfonyComponentHttpKernelExceptionBadRequestHttpException 400
symfonyComponentHttpKernelExceptionConflictHttpException 409 SymfonyComponentHttpkernelexceptiongonehttpexception
symfony compntpkernelexceptionhttpexception onenthttpkernelexceptionmethodnodnotlowedhttpexception
406
symfonyComponenthttpkernelexceptionpreconditionfailedhttpexception
$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}
これらの例外の特別な点は、リソースの作成、更新、または削除時に発生した検証エラーをこれらの例外に渡すことができることです。 新しいユーザーの作成が認証に失敗したときに StoreResourceFailedException 例外がスローされる例を見てみましょう:
認証が失敗した場合は、次の JSON 形式の情報が表示されます:
フォームリクエストを使用する場合は、API フォームリクエストの基本クラスを継承するか、独自のクラスを実装する必要があります。 API リクエストの基本クラスは、入力リクエストが API に対するリクエストであるかどうかを確認し、その場合、検証が失敗すると DingoApiExceptionValidationHttpException がスローされます。この例外は Dingo API によってレンダリングされ、エラー応答を返します。 独自のフォームリクエストを実装したい場合は、failedValidation メソッドと failedAuthorization メソッドをオーバーロードする必要があります。これにより、Laravel によってスローされる HTTP 例外の代わりに、上記の例外のいずれかをスローする必要があります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。