2016-10-17 7 views
0

私はdingo/api laravelパッケージを使用してAPIを作成しています。dingo/apiの応答にキーを追加Laravelパッケージ

すべてのAPI呼び出しにsuccessの重要な応答を追加します。エラーが発生した場合はsuccess: false、すべてがOKならばsuccess: trueとなります。

最終応答必見は次のようになります。

{ 
"success":true, 
"data": [{}, {}] 
} 

私はこのような余分なキーを追加する->setMeta($meta);方法があることを知っている:

{ 
    "data": [{}, {}], 
    "meta": { 
     "success": true, 
     "status_code": 200 
    }, 
} 
:怒鳴る応答を作成し

$meta = array(
    'success' => 'true', 
    'status_code' => 200 
); 

return $this->response->collection($users, new UserTransformer)->setMeta($meta); 

ご覧のとおり、setMetaは01の下に余分なキーを追加します私はそれが欲しくない鍵です。

私はそれをResponses documentationsと読んだが、解決策は見つけられなかった。

どうすればよいですか?

+0

なぜ 'meta'はオプションではありませんか? – Wrong

+0

@間違って、もっとシンプルにする。私がチェックした大部分の主要なAPIの中には、結果ステータスを示すブール値を持つ 'ok'や' success'のような単純なキーがあります。一方、フロントエンドの開発者は、より単純なタスクも持っています。 –

+1

REST APIは成功/エラー報告のためのhttpコードに基づいています。開発者がHTTP 200 OKステータスを取得した場合、リクエストが成功したことを意味します。ビジネスロジックの他のタイプのエラー/成功報告については、あなたのdingo APIレスポンスにメタキーを使用することができます。あるいは、jsonレスポンスを手動で作成することもできます(foreachループでトランスフォーマーを使用することもできます)。 '$ this-> response-> array()'メソッドを使用して必要なレスポンス構造を構築します – Wrong

答えて

0

これは、私はそれが苦痛だった知っているあなた

$api->get('book/{id}', function ($id){ 
    $book = Book::FindOrFail($id); 
    $_res['success'] = true; 
    $_res['book'] = $book; 
    return $_res; 
}); 

と編集のconfig/api.php

'errorFormat' => [ 
    'success' => false, 
    'message' => ':message', 
    'errors' => ':errors', 
    'code' => ':code', 
    'status_code' => ':status_code', 
    'debug' => ':debug', 
], 
0

のに役立ちます。試して数時間後に。これは私が見つけたものです。 Dingo APIにはデフォルトで一貫したAPIレスポンスがありません。すべての成功結果に対して、データとメタを返しますが、エラーの場合はステータスコードとメッセージを返します(これはすべてのエラー応答がExceptionハンドラを使用するためです)。あなたは、これはイベントリスナーであり、すべての応答が送り出す、それは最初の応答をモーフィングしますこのよう https://github.com/dingo/api/wiki/Responses#morphing-and-morphed-events

を使用する必要が成功応答のために

。応答の様子をより詳細に制御できるようになります。例:

app/Listenersディレクトリの下にリスナーファイルを作成します。

use Dingo\Api\Event\ResponseWasMorphed; 

class AddSuccessKeyToResponse 
{ 
    public function handle(ResponseWasMorphed $event) 
    { 
     $event->content['success'] = 1; 

    } 
} 

すべての例外ハンドラのエラー応答がするように、あなただけの、設定/ api.phpファイルのエラーフォーマットを編集する必要がエラー応答のためのアプリ/プロバイダ/ EventServiceProvider.php

でイベント
protected $listen = [ 
    'Dingo\Api\Event\ResponseWasMorphed' => [ 
     'App\Listeners\AddSuccessKeyToResponse' 
    ] 
]; 

を聞く追加形式に従って。たとえば

'errorFormat' => [ 
    'success' => false, 
    'message' => ':message', 
    'errors' => ':errors', 
    'code' => ':code', 
    'status_code' => ':status_code', 
    'debug' => ':debug', 
] 
関連する問題