2016-05-30 2 views
0

Я пытаюсь использовать API-интерфейс Dingo для реализации API-интерфейсов RESTful для нашего webapp. Лучшие практики говорят, что полезная нагрузка ответа должна содержать links для возвращаемых объектов ресурсов. Он может быть в форме _link или href. Я не вижу способа включить это в ответ без использования URL-адреса ресурса. Я хотел был бы получить ответ примерно как ...Laravel 5.2/Ссылка ресурса API Dingo в ответе

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

Есть ли способ включить ссылку ресурса в ответ?

ответ

1

Вы используете преобразования для генерации ваших данных ответа. Dingo API использует Fractal как слой преобразования по умолчанию. Таким образом, вы будете нуждаться в PersonTransformer к примеру, как показано ниже:

<?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, 
       ], 
      ], 
     ]; 
    } 
} 

Вы можете обратиться к следующей ссылке для получения дополнительной информации о преобразованиях и как использовать их для конкретных фрактал. Fractal Transformers

+0

Да, я использую трансформаторы. Спасибо. Это сработало. Как просто добавить «$ person-> id» в текущий URL? В этом случае я знаю свой URI в Transformer, который я бы хотел избежать, чтобы он продолжал работать, когда я изменяю версию API в URI. – donnie

+0

Один из способов сделать это - заменить «uri» следующим, чтобы получить текущий запрос, и это всегда будет работать, когда вы измените структуру url «uri» => \ Request :: url(). '/'. $ Человек-> идентификатор ,. Однако это может не сработать правильно, если вы используете, а также при возврате одного элемента. Таким образом, это может быть не проблема api, скорее ваш клиент уже должен знать конечную точку для api. Если вам все же необходимо предоставить абсолютный путь, вы можете использовать вспомогательную функцию, которая возвращает конечную точку. – tnash

+0

Спасибо. В этом есть смысл. – donnie

Смежные вопросы