omalizadeh/laravel-api-response

使用 JSON 资源为 Laravel 提供的基本和标准 API 响应格式

v1.1.1 2023-08-04 12:14 UTC

This package is auto-updated.

Last update: 2024-09-04 14:42:25 UTC


README

使用 JSON 资源为 Laravel 提供的基本和标准 API 响应格式。

安装

composer require omalizadeh/laravel-api-response

输出格式

资源

{
    "data": {
        "id": 1,
        "email": "test@test.com"
    },
    "message": "message",
    "errors": {
        "password": [
            "wrong password."
        ]
    }
}

资源集合

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

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

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

使用方法

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

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

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

<?php

namespace App\Http\Resources;

use Omalizadeh\ApiResponse\Resources\BaseApiResource;

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()->errorMessage('phone is not updated');
        }
        
        return apiResponse()->data($phone)->message('phone is updated')->get();
    }
}

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

资源

php artisan make:api-resource ResourceClassName

请求

php artisan make:api-request RequestClassName