hpolthof / laravel-api
Laravel 5 的 API 渲染包
v0.1.4
2017-01-11 15:17 UTC
Requires
- php: >=5.4.0
README
此包是为内部项目创建的,但由于该想法具有可重用性,我鼓励其他人使用此包。
主要目标是创建一种统一的方式来呈现 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" } } }