目次
1. レスポンス ビルダー
配列応答
単一アイテム応答
コレクション応答
ページ分割された応答
コンテンツなし応答
応答の作成
エラー応答
追加の応答ヘッダーを追加します
メタデータの追加
応答ステータス コードを設定します
2. カスタマイズされた応答形式
3. モーフィングとモーフィング イベント
ホームページ バックエンド開発 PHPチュートリアル Laravel & Lumen RESTFul API 拡張パッケージ: Dingo API (3) -- Response (レスポンス)

Laravel & Lumen RESTFul API 拡張パッケージ: Dingo API (3) -- Response (レスポンス)

Jun 20, 2016 pm 12:32 PM

API の主な機能はリクエストを取得し、クライアントにレスポンスを返すことです。レスポンスの形式は JSON など多岐にわたり、レスポンスの返し方もクライアントによって異なります。現在構築中の API の複雑さと将来の考慮事項。

応答を返す最も簡単な方法は、配列またはオブジェクトをコントローラーから直接返すことです。ただし、すべての応答オブジェクトが正しくフォーマットされていることが保証されているわけではないため、それらが ArrayObject または IlluminateSupportContractsArrayableInterface インターフェイスを実装していることを確認する必要があります。 :

class UserController{    public function index()    {        return User::all();    }}
ログイン後にコピー

この場合、User クラスは IlluminateDatabaseEloquentModel を継承します。つまり、返されるデータは配列としてフォーマットでき、もちろん単一のユーザーも返すことができます:

class UserController{    public function show($id)    {        return User::findOrFail($id);    }}
ログイン後にコピー

Dingo API は、応答を自動的に JSON 形式にフォーマットし、Content-Type ヘッダーを application/json に設定します。

1. レスポンス ビルダー

レスポンス ビルダーは、よりカスタマイズされたレスポンスを簡単に作成できるように、スムーズなインターフェイスを提供します。レスポンス ビルダーは、トランスフォーマーと一緒に使用されることがよくあります。

レスポンス ビルダー コントローラーを使用するには、DingoApiRoutingHelperstrait を使用する必要があります。この特性をすべてのコントローラーで利用できるようにするには、API 基本クラス コントローラー コントローラーに配置します。

use Dingo\Api\Routing\Helpers;use Illuminate\Routing\Controller;class BaseController extends Controller{    use Helpers;}
ログイン後にコピー

このコントローラーを継承するコントローラーを定義できるようになりました。このコントローラーでは、$response プロパティを介して応答ビルダーにアクセスできます。

配列応答

class UserController extends BaseController{    public function show($id)    {        $user = User::findOrFail($id);        return $this->response->array($user->toArray());    }}
ログイン後にコピー

単一アイテム応答

class UserController extends BaseController{    public function show($id)    {        $user = User::findOrFail($id);        return $this->response->item($user, new UserTransformer);    }}
ログイン後にコピー

コレクション応答

class UserController extends BaseController{    public function index()    {        $users = User::all();        return $this->response->collection($users, new UserTransformer);    }}
ログイン後にコピー

ページ分割された応答

class UserController extends BaseController{    public function index()    {        $users = User::paginate(25);        return $this->response->paginator($users, new UserTransformer);    }}
ログイン後にコピー

コンテンツなし応答

return $this->response->noContent();
ログイン後にコピー

応答の作成

return $this->response->created();
ログイン後にコピー

リソースの作成時に最初のパラメータとして位置情報を渡すこともできます:

return $this->response->created($location);
ログイン後にコピー

エラー応答

さまざまな組み込みエラーがエラー応答を生成します:

// A generic error with custom message and status code.return $this->response->error('This is an error.', 404);// A not found error with an optional message as the first parameter.return $this->response->errorNotFound();// A bad request error with an optional message as the first parameter.return $this->response->errorBadRequest();// A forbidden error with an optional message as the first parameter.return $this->response->errorForbidden();// An internal error with an optional message as the first parameter.return $this->response->errorInternal();// An unauthorized error with an optional message as the first parameter.return $this->response->errorUnauthorized();
ログイン後にコピー

追加の応答ヘッダーを追加します

上記の方法を使用した後、応答を追加して応答をカスタマイズすることもできますheaders:

return $this->response->item($user, new UserTransformer)->withHeader('X-Foo', 'Bar');
ログイン後にコピー

メタデータの追加

一部の変換レイヤーではメタデータを使用する場合があります。これは、リソースに関連付けられた追加データを提供する必要がある場合に便利です。

return $this->response->item($user, new UserTransformer)->addMeta('foo', 'bar');
ログイン後にコピー

メタデータ配列を設定して、複数のメソッド チェーンの呼び出しを置き換えることもできます。

return $this->response->item($user, new UserTransformer)->setMeta($meta);
ログイン後にコピー

応答ステータス コードを設定します

return $this->response->item($user, new UserTransformer)->setStatusCode(200);
ログイン後にコピー

2. カスタマイズされた応答形式

インストール設定で、Dingo API はデフォルトで自動的に JSON 形式を使用し、対応するコンテンツを設定します。タイプヘッド。 JSON に加えて、JSONP 形式もあります。形式を変更すると、応答がコールバックにカプセル化されます。形式を登録および変更するには、構成ファイル (Laravel) または起動ファイル (Lumen) のデフォルトの JSON 形式を JSONP:

'formats' => [    'json' => 'Dingo\Api\Http\Response\Format\Jsonp']
ログイン後にコピー

または:

Dingo\Api\Http\Response::addFormatter('json', new Dingo\Api\Http\Response\Format\Jsonp);
ログイン後にコピー

に置き換えるだけです。デフォルトでは、コールバック パラメータのデフォルトのクエリ文字列は callback です。これは、コンストラクタの最初のパラメータを変更することで設定できます。クエリ文字列にパラメータが含まれていない場合は、JSON 応答が返されます。

必要な応答形式を登録して使用することもできます。カスタム形式オブジェクトは DingoApiHttpResponseFormatFormat クラスから継承する必要があり、formatEloquentModel、formatEloquentCollection、formatArray、getContentType のメソッドも実装する必要があります。

3. モーフィングとモーフィング イベント

Dingo API が応答を送信する前に、応答は変換 (モーフ) されます。このプロセスには、すべてのトランスフォーマー (Transformer) の実行が含まれます。そして、設定された応答形式で応答を送信します。応答の変換方法を制御する必要がある場合は、ResponseWasMorphed および ResponseIsMorphing イベントを使用できます。

app/Listeners にイベントのリスナーを作成します:

use Dingo\Api\Event\ResponseWasMorphed;class AddPaginationLinksToResponse{    public function handle(ResponseWasMorphed $event)    {        if (isset($event->content['meta']['pagination'])) {            $links = $event->content['meta']['pagination']['links'];            $event->response->headers->set(                'link',                sprintf('<%s>; rel="next", <%s>; rel="prev"', $links['links']['next'], $links['links']['previous'])            );        }    }}
ログイン後にコピー

次に、イベントとそれに対応するリスナーを EventServiceProvider に登録してイベントをリッスンします:

protected $listen = [    'Dingo\Api\Event\ResponseWasMorphed' => [        'App\Listeners\AddPaginationLinksToResponse'    ]];
ログイン後にコピー

ページ分割されたリンクを含むすべての応答にも、これらのリンクがリンク ヘッダーに追加されるようになります。

注: この機能は現在まだ開発段階にあり、運用環境での使用は推奨されません。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPロギング:PHPログ分析のベストプラクティス PHPロギング:PHPログ分析のベストプラクティス Mar 10, 2025 pm 02:32 PM

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

See all articles