【问题标题】:Laravel 5.2/Dingo API resource link in the response响应中的 Laravel 5.2/Dingo API 资源链接
【发布时间】:2016-09-28 08:00:55
【问题描述】:

我正在尝试使用 Dingo API 为我们的 web 应用程序实现 RESTful 后端 API。最佳实践表明响应负载应该包含links 到返回的资源对象。它可以是_linkhref 的形式。如果没有手工制作资源 URL,我看不到将其包含在响应中的方法。我希望得到类似...的响应。

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

有没有办法可以在响应中包含资源链接?

【问题讨论】:

    标签: php rest laravel laravel-5 dingo-api


    【解决方案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

    【讨论】:

    • 是的,我正在使用变形金刚。谢谢你。这行得通。如何将 $person-&gt;id 附加到当前 URL?在这种情况下,我知道我想避免的 Transformer 中的 URI,因此,当我更改 URI 上的 API 版本时,它将继续工作。
    • 您可以做到这一点的一种方法是将 'uri 替换为以下内容以获取当前请求,并且当您更改 url 结构 'uri' => \Request::url() 时,这将始终有效。 '/' 。 $person->id,。但是,当您使用包含以及返回单个项目时,这可能无法正常工作。所以它可能不是 api 的工作,而是您的客户端应该已经知道 api 的端点。但是,如果您仍然需要提供绝对路径,则可以使用返回端点的辅助函数。
    • 谢谢。这是有道理的。
    猜你喜欢
    • 2016-07-03
    • 2016-03-22
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2019-10-20
    • 2017-06-02
    相关资源
    最近更新 更多