2016-05-30 7 views
0

Dingo APIを使用して、Webアプリケーション用のRESTfulバックエンドAPIを実装しようとしています。ベストプラクティスでは、応答ペイロードには返されたリソースオブジェクトにlinksが含まれている必要があります。これは、_linkまたはhrefの形式にすることができます。リソースのURLを手作業で作成せずにこれをレスポンスに含める方法はありません。私は次のような応答をしたいと思います...Laravel 5.2/Dingo APIリソースのリンク

[ 
{ 
    'person': "Joe", 
    '_link': 'http://api.mydomain.com/v1/persons/2' 
}, 
{ 
    'person': "Pat", 
    '_link': 'http://api.mydomain.com/v1/persons/3' 
} 
] 

応答にリソースリンクを含める方法はありますか?

答えて

1

応答データを生成するために変換を使用していますか。 Dingo APIでは、Fractalをデフォルトの変換レイヤーとして使用します。あなたが変換し、どのようにフラクタルに固有のそれらを使用する方法の詳細については、以下のリンクを参照することができます

<?php 
namespace App\Transformer; 

use App\Model\Person; 
use League\Fractal; 

class PersonTransformer extends Fractal\TransformerAbstract 
{ 
    public function transform(Person $person) 
    { 
     return [ 
      'id' => (int) $person->id, 
      'person' => $person->name, 
      'links' => [ 
       [ 
        'rel' => 'self', 
        'uri' => '/persons/' . $person->id, 
       ], 
      ], 
     ]; 
    } 
} 

:以下のようにだからあなたは、例えばPersonTransformerが必要になります。 Fractal Transformers

+0

はい、私はトランスフォーマーを使用しています。ありがとうございました。これはうまくいった。 '$ person-> id'を現在のURLに追加するにはどうすればよいですか?この場合、私はトランスフォーマーの私のURIを知っていますので、URI上でAPIバージョンを変更すると、それが機能するようにします。 – donnie

+0

これを行う方法の1つは、 'uri'を次のように置き換えて現在のリクエストを取得することです。これはurl構造体 'uri' => \ Request :: url()を変更すると常に機能します。 '/'。 $ person-> id、。ただし、Includeを使用すると、単一のアイテムを返すときに正しく動作しないことがあります。だから、APIの仕事ではないかもしれない、むしろあなたのクライアントはすでにAPIの終点を知っているはずです。ただし、絶対パスを指定する必要がある場合は、エンドポイントを返すヘルパー関数を使用できます。 – tnash

+0

ありがとうございます。それは理にかなっている。 – donnie