signaturetech/laravel-api-response-builder

一个超级简单的包,可让您在整个Laravel应用程序中实现一致的API响应

1.0.2 2023-10-29 07:13 UTC

This package is auto-updated.

Last update: 2024-09-29 09:20:09 UTC


README

Laravel

Laravel API Response Builder

GitHub Unit Tests Packagist Downloads

目录

简介

ResponseBuilder 是一个 Laravel 包,旨在帮助您构建漂亮、规范且易于消费的REST API JSON响应。

安装与配置

您可以通过Composer安装此包

composer require signaturetech/laravel-api-response-builder

接下来,运行以下命令以设置 api-response.config 文件,您可以设置您的配置。

php artisan vendor:publish --tag=response-builder

示例

示例:成功

use SignatureTech\ResponseBuilder\ResponseBuilder;


public function index() {
    $users = User::query()->take(2)->get();

    return ResponseBuilder::success($users);
}

// Output
Status: 200 OK
{
    "status": true,
    "data": [
        {
            "id": 1,
            "name": "Prof. Bell Hayes",
            "email": "myundt@example.net",
            "email_verified_at": "2022-12-07T05:27:30.000000Z",
            "created_at": "2022-12-07T05:27:30.000000Z",
            "updated_at": "2022-12-07T05:27:30.000000Z"
        },
        {
            "id": 2,
            "name": "Ms. Tessie Streich III",
            "email": "dledner@example.net",
            "email_verified_at": "2022-12-07T05:27:30.000000Z",
            "created_at": "2022-12-07T05:27:30.000000Z",
            "updated_at": "2022-12-07T05:27:30.000000Z"
        }
    ]
}

示例:自定义成功

use SignatureTech\ResponseBuilder\ResponseBuilder;


public function login() {
    $user = User::query()->first();
    $token = Uuid::uuid4();

    return ResponseBuilder::asSuccess()
        ->withMessage('Successfuly Login')
        ->with('auth_token', $token)
        ->withData([
            'profile' => new UserResource($user)
        ])
        ->build();
}

// Output
Status: 200 OK
{
    "status": true,
    "message": "Successfuly Login",
    "auth_token": "65050859-1a05-4fa8-827f-7023ff73d4a3",
    "data": {
        "profile": {
            "id": 1,
            "name": "Prof. Bell Hayes",
            "email": "myundt@example.net"
        }
    }
}

示例:错误

use SignatureTech\ResponseBuilder\ResponseBuilder;


public function index() {
    return ResponseBuilder::error('Sorry We are not able to getting your details', Response::HTTP_INTERNAL_SERVER_ERROR);
}

// Output
Status: 500 Internal Server Error
{
    "status": false,
    "message": "Sorry We are not able to getting your details"
}

示例:自定义错误

use SignatureTech\ResponseBuilder\ResponseBuilder;


public function index() {
    return ResponseBuilder::asError(Response::HTTP_BAD_GATEWAY)
        ->withMessage('Sorry We are not able to getting your details')
        ->with('custom_key', 'value')
        ->withData([
            'bad_gateway_error' => 'We are not able to process your request'
        ])
        ->build();
}

// Output
Status: 502 Bad Gateway
{
    "status": false,
    "message": "Sorry We are not able to getting your details",
    "code": 10001,
    "data": {
        "bad_gateway_error": "We are not able to process your request"
    }
}

示例:验证错误消息

use SignatureTech\ResponseBuilder\Http\ValidationFailed;

class UserRequest extends FormRequest
{
    use ValidationFailed;

    .
    .
}


// Output
Status: 400 Bad Request
{
    "status": false,
    "errors": {
        "name": [
            "The name field is required."
        ],
        "email": [
            "The email field is required."
        ]
    }
}

  • 您可以在 config/api-response.php 中的变量 validation_http_code 下自定义HttpStatus代码。
  • 您可以在 config/api-response.php 中的变量 show_validation_failed_message 下自定义错误消息,all 用于获取所有错误消息,first 用于获取第一条消息。

示例

// config/api-response.php
'show_validation_failed_message'  => 'first',

// Output
Status: 400 Bad Request
{
    "status": false,
    "message": "The name field is required."
}

示例:自定义字段

use SignatureTech\ResponseBuilder\ResponseBuilder;

public function index() {
    $user = User::query()->first();

    $token = Uuid::uuid4();

    return ResponseBuilder::asSuccess()->with('auth_token', $token)->withData($user)->build();
}

// Output:
Status: 200 OK
{
    "status": true,
    "auth_token": "21d97007-e2b9-4ee1-86b1-3cfb96787436",
    "data": {
        "id": 1,
        "name": "Prof. Bell Hayes",
        "email": "myundt@example.net",
        "email_verified_at": "2022-12-07T05:27:30.000000Z",
        "created_at": "2022-12-07T05:27:30.000000Z",
        "updated_at": "2022-12-07T05:27:30.000000Z"
    }
}

示例:分页

use SignatureTech\ResponseBuilder\ResponseBuilder;

public function index() {
    $user = User::query()->paginate(3);

    return ResponseBuilder::asSuccess()->withPagination($user)->build();
}

// Output:
Status: 200 OK
{
    "status": true,
    "data": [
        {
            "id": 1,
            "name": "Prof. Bell Hayes",
            "email": "myundt@example.net",
            "email_verified_at": "2022-12-07T05:27:30.000000Z",
            "created_at": "2022-12-07T05:27:30.000000Z",
            "updated_at": "2022-12-07T05:27:30.000000Z"
        },
        .
        .
    ],
    "meta": {
        "total_page": 14,
        "current_page": 1,
        "total_item": 40,
        "per_page": 3
    },
    "link": {
        "next": true,
        "prev": false
    }
}

示例:分页,您正在使用JsonResource

use SignatureTech\ResponseBuilder\ResponseBuilder;

public function index() {
    $user = User::query()->paginate(3);

    return ResponseBuilder::asSuccess()->withPagination($user, UserResource::class)->build();
}

// Output:
Status: 200 OK
{
    "status": true,
    "data": [
        {
            "id": 1,
            "name": "Prof. Bell Hayes",
            "email": "myundt@example.net"
        },
        .
        .
    ],
    "meta": {
        "total_page": 14,
        "current_page": 1,
        "total_item": 40,
        "per_page": 3
    },
    "link": {
        "next": true,
        "prev": false
    }
}

许可证