hpolthof/laravel-api

Laravel 5 的 API 渲染包

v0.1.4 2017-01-11 15:17 UTC

This package is auto-updated.

Last update: 2024-09-11 03:51:09 UTC


README

Latest Stable Version License Total Downloads

此包是为内部项目创建的,但由于该想法具有可重用性,我鼓励其他人使用此包。

主要目标是创建一种统一的方式来呈现 API 输出,并在数据结构和输出之间创建一个层。

安装

使用 composer 安装此包

composer require hpolthof/laravel-api

将以下服务提供者添加到您的 config/app.php 配置文件中

'Hpolthof\LaravelAPI\APIServiceProvider',

中间件

将名为 api.errors 的新中间件添加到您的可用中间件列表中。

如果您使用的是 Laravel 5.3,则此中间件也将添加到 api 中间件组中。

用法

要使用此包,您应在 Eloquent 模型上实现 Hpolthof\LaravelAPI\Contracts\ShouldMorphAPI 接口。

您必须实现 bindAPI() 函数,并返回 Hpolthof\LaravelAPI\Binding 的一个实例。

如下所示

public function bindAPI()
{
    return Binding::create([
        'street' => $this->street,
        'street_nr' => $this->number,
        'street_suffix' => $this->suffix,
        'postcode' => $this->zip,
        'city' => $this->city,
    ]);
}

在控制器中,您可以返回以下内容

public function index()
{
    $items = Address::all();
    return \Response::api($items);
}
    
public function show($id)
{
    $item = Address::find($id);
    return \Response::api($item);
}

响应将类似于以下内容

{
    "header": {
        "request": {
            "location": "http:\/\/localhost:8000\/api\/addresses",
            "method": "GET",
            "parameters": []
        },
        "response": {
            "status": 200,
            "error": null,
            "timestamp": "2016-11-28 14:09:35"
        }
    },
    "content": [
        {
            "street": "Van der Polweg",
            "street_nr": 17,
            "street_suffix": "",
            "postcode": "3384HD",
            "city": "Amersfoort",
        },
        {
            "street": "Van der Polweg",
            "street_nr": 15,
            "street_suffix": "",
            "postcode": "3384HD",
            "city": "Amersfoort",
        }
    ]
}

错误消息

有时您可能需要将错误强制传递给用户,这可以通过抛出异常来实现。该包还提供了一些特定异常,应在相关位置使用。

Hpolthof\LaravelAPI\Exceptions\AccessDeniedException
Hpolthof\LaravelAPI\Exceptions\BadRequestException
Hpolthof\LaravelAPI\Exceptions\NotFoundException
Hpolthof\LaravelAPI\Exceptions\NotImplementedException

这将导致以下内容

{
    "header": {
        "request": {
            "location": "http:\/\/localhost:8000\/api\/addresses",
            "method": "GET",
            "parameters": []
        },
        "response": {
            "status": 403,
            "error": "Forbidden",
            "timestamp": "2016-11-28 15:05:29"
        }
    }
}