ホームページ >バックエンド開発 >PHPチュートリアル >Laravel & Lumen RESTFul API 拡張パッケージ: Dingo API (4) -- エラーおよび例外応答
API を構築する際のエラー処理は面倒な作業です。Dingo API では、エラー応答を手動で構築する必要はなく、SymfonyComponentHttpKernelExceptionHttpException から継承された例外をスローするだけで済み、API がこれを自動的に処理します。あなたのために。
以下は Dingo API に組み込まれている Symfony 例外です:
Exception | ステータスコード |
SymfonyComponentHttpKernelExceptionAccessDeniedH ttpException | 403 |
symfonyComponentHttpKernelExceptionBadRequestHttpException | 400 |
symfonyComponentHttpKernelExceptionConflictHttpException | 409 SymfonyComponentHttpkernelexceptiongonehttpexception | 410
symfony compntpkernelexceptionhttpexception onenthttpkernelexceptionmethodnodnotlowedhttpexception | 405|
406 | |
symfonyComponenthttpkernelexceptionpreconditionfailedhttpexception | 412symfonycomponenthtpkernelexceptiontoomanyrequestshtttpexception |
symfonycomponenthttpkernelexceptionnauthorizedh ttpexceptionceptionceptionceptionsceptionsceptionsceptionsception | |
$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. });}); | Dingo API は、スローされた例外を自動的にキャッチして JSON 形式に変換します。 ConflictHttpException に対応する HTTP ステータス コードは 409 です。デフォルトの JSON 形式のエラー メッセージは次のとおりです。 { "message": "User was updated prior to your request.", "status_code": 409} |
これらの例外の特別な点は、リソースの作成、更新、または削除時に発生した検証エラーをこれらの例外に渡すことができることです。 | 新しいユーザーの作成が認証に失敗したときに StoreResourceFailedException 例外がスローされる例を見てみましょう: |
2. カスタム HTTP 例外 | |
3. カスタム例外応答 | |
認証が失敗した場合は、次の JSON 形式の情報が表示されます: | 4. フォームリクエスト |
フォームリクエストを使用する場合は、API フォームリクエストの基本クラスを継承するか、独自のクラスを実装する必要があります。 API リクエストの基本クラスは、入力リクエストが API に対するリクエストであるかどうかを確認し、その場合、検証が失敗すると DingoApiExceptionValidationHttpException がスローされます。この例外は Dingo API によってレンダリングされ、エラー応答を返します。 | 独自のフォームリクエストを実装したい場合は、failedValidation メソッドと failedAuthorization メソッドをオーバーロードする必要があります。これにより、Laravel によってスローされる HTTP 例外の代わりに、上記の例外のいずれかをスローする必要があります。 |