behamin/bresources

Behamin 基础和标准 API 响应格式 for Laravel

v2.3.0 2023-06-04 09:14 UTC

README

License Tests Latest Stable Version Total Downloads

Behamin 资源

Behamin API 响应的标准格式。

安装

composer require behamin/bresources

输出格式

资源

{
    "data": {
        "id": 1,
        "email": "test@test.com"
    },
    "message": "message",
    "error": {
        "message": "or error message",
        "errors": null
    }
}

资源集合

{
    "data": {
        "items": [],
        "count": 0,
        "sum": null
    },
    "message": null,
    "error": {
        "message": null,
        "errors": null
    }
}

请求验证错误(422 状态码)时

{
    "data": null,
    "message": null,
    "error": {
        "message": "first error message in message bag",
        "errors": {
            "password": [
                "password field is required."
            ]
        }
    }
}

使用方法

使用 artisan 命令创建资源和请求,并将数据、消息、错误消息或计数传递给资源,如下所示示例

    public function index(EmailFilter $filters)
    {
        list($emails, $count) = Email::filter($filters);
        $emails = $emails->get();
        
        return EmailResource::collection(['data' => $emails, 'count' => $count]);
    }
    public function show(Email $email)
    {
        return new EmailResource(['data' => $email, 'message'=> 'email info.']);
    }

您可以从资源类的 transformDataItem() 方法指定输出字段。

<?php

namespace App\Http\Resources;

use Behamin\BResources\Resources\BasicResource;

class EmailResource extends BasicResource
{
    protected function transformDataItem($item)
    {
        return [
            'id' => $item->id,
            'email' => $item->email,
            'status' => $item->status
        ];
    }
}

此外,您还可以使用 apiResponse() 辅助函数直接发送响应

class PhoneController {

    public function show(Phone $phone)
    {
        return apiResponse()->data($phone)->message('phone info.')->status(200)->get();
    }
    
    public function index() {
        $phones = Phone::all();
        
        return apiResponse()->collection($phones, $phones->count())->message('phone info.')->status(200)->get();
    }
    
    public function update(Request $request, Phone $phone) {
        $isUpdated = $phone->update($request->all());
        
        if (!$isUpdated) {
            return apiResponse()->errors('phone is not updated');
        }
        
        return apiResponse()->data($phone)->message('phone is updated')->get();
    }
    
    public function delete(Phone $phone)
    {
        $phone->delete();
        
        return apiResponse()->message('phone info.')->next('https://debut.test')->status(200)->get();
    }
}

在上面的示例中,messagestatus 是可选的,它们的默认值分别是 null200

资源

php artisan make:bresource ResourceClassName

请求

php artisan make:brequest RequestClassName