arinasystems/laravel-json-response

在Laravel中轻松生成JSON响应。

1.0.4 2022-02-23 09:49 UTC

This package is auto-updated.

Last update: 2024-09-23 15:25:45 UTC


README

Laravel JSON Response Cover


Latest Version on Packagist Build Status Quality Score Total Downloads MIT Software License

Laravel JSON响应

一个可扩展且强大的Laravel API响应包。

  • 本地化响应
  • 预设响应状态
  • 属性构建器
  • 数据转换器
  • JSON异常处理器

安装

您可以通过composer安装此包

composer require arinasystems/laravel-json-response

该包将自动注册其服务提供者。

您可以选择使用以下命令发布配置文件:

php artisan vendor:publish --tag="json-response:config"

基本用法

use ArinaSystems\JsonResponse\Facades\JsonResponse;

/**
 * Display a listing of products.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
    $products = Product::paginate(2);

    return JsonResponse::json('ok', ['data' => ProductResource::collection($products)]);
}

只需一行代码,您的API客户端即可获得此响应

{
    "success": true,
    "code": 200,
    "http_code": 200,
    "locale": "en",
    "message": "ok",
    "data": [
        {
            "id": "7OLgzrB1QVBQWMNZ3Rx08a24wAGEjqYVbeV",
            "name": "Aquafina Plastic Water Gallon – 18.9 L",
            "in_stock": true,
            "in_cart": false
            ...
        },
        {
            "id": "g3RbPoyMmPg9zr7qGZjW50Lp61aDlwnVOkE",
            "name": "Aquafina Plastic Water Bottle – 1.5 L",
            "in_stock": true,
            "in_cart": true
            ...
        }
    ],
    "additional": null,
    "links": {
        "first": "http://example.com/api/customer/products?page=1",
        "last": "http://example.com/api/customer/products?page=2",
        "prev": null,
        "next": "http://example.com/api/customer/products?page=2"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 2,
        "path": "http://example.com/api/customer/products",
        "per_page": "2",
        "to": 2,
        "total": 3
    }
}

配置

您可以从config/json-response.php文件中自定义响应配置。

<?php

return [
    'attributes'           => [
        'success'    => [
            'builder'     => \ArinaSystems\JsonResponse\Builders\SuccessAttributeBuilder::class,
            'value'       => true,
            'on-response' => true,
            'on-error'    => true,
        ],
        'code'       => [
            'builder'     => null,
            'value'       => 200,
            'on-response' => true,
            'on-error'    => true,
        ],
        'http_code'  => [
            'builder'     => null,
            'value'       => 200,
            'on-response' => true,
            'on-error'    => true,
        ],
        'locale'     => [
            'builder'     => \ArinaSystems\JsonResponse\Builders\LocaleAttributeBuilder::class,
            'value'       => null,
            'on-response' => true,
            'on-error'    => true,
        ],
        'message'    => [
            'builder'     => \ArinaSystems\JsonResponse\Builders\MessageAttributeBuilder::class,
            'value'       => null,
            'on-response' => true,
            'on-error'    => true,
        ],
        'data'       => [
            'builder'     => \ArinaSystems\JsonResponse\Builders\DataAttributeBuilder::class,
            'value'       => null,
            'on-response' => true,
            'on-error'    => false,
        ],
        'headers'    => [
            'value'       => [],
            'on-response' => false,
            'on-error'    => false,
        ],
        'exception'  => [
            'builder'     => \ArinaSystems\JsonResponse\Builders\ExceptionAttributeBuilder::class,
            'value'       => null,
            'on-response' => false,
            'on-error'    => true,
        ],
        'errors'     => [
            'builder'     => \ArinaSystems\JsonResponse\Builders\ErrorsAttributeBuilder::class,
            'value'       => [],
            'on-response' => false,
            'on-error'    => true,
        ],
        'debug'      => [
            'builder'     => \ArinaSystems\JsonResponse\Builders\DebugAttributeBuilder::class,
            'value'       => null,
            'on-response' => false,
            'on-error'    => true,
        ],
        'additional' => [
            'builder'     => null,
            'value'       => null,
            'on-response' => true,
            'on-error'    => true,
        ],
        'links'      => [
            'builder'     => null,
            'value'       => null,
            'on-response' => true,
            'on-error'    => true,
        ],
        'meta'       => [
            'builder'     => null,
            'value'       => null,
            'on-response' => true,
            'on-error'    => true,
        ],
    ],

    'status'               => [
        'ok' => \ArinaSystems\JsonResponse\Status\OkStatus::class,
    ],

    'transformers'         => [
        \Illuminate\Database\Eloquent\Model::class          => \ArinaSystems\JsonResponse\Transformers\EloquentTransformer::class,
        \Illuminate\Http\Resources\Json\JsonResource::class => \ArinaSystems\JsonResponse\Transformers\JsonResourceTransformer::class,
    ],

    'encoding_options'     => JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT | JSON_UNESCAPED_UNICODE,
    'debug'                => env('APP_DEBUG', false),
    'message_translations' => true,
];

响应结构

配置文件中的第一个部分允许您设置正常响应和错误响应属性。每个属性数组包含四个选项

  • builder: 用于构建属性值。(构建器类或null以禁用)
  • value: 如果未传入,则是一个默认值。(混合类型)
  • on-response: 确定此属性是否将出现在正常响应中。(布尔值)
  • on-error: 确定此属性是否将出现在错误响应中。(布尔值)

预设状态

在transformers数组中定义"Status"数组中的预设状态。键定义状态名称,值是案例类的名称。

数据转换器

指定给定对象类型的数据转换器作为键,转换器类作为值。

JSON编码选项

在'encoding_options'中设置JSON编码选项。

调试模式

在'debug'选项中启用/禁用调试模式。

消息翻译

在'message_translations'选项中启用/禁用区域设置响应消息。

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献

安全

如果您发现任何与安全相关的问题,请通过电子邮件info@arinasystems.com联系,而不是使用问题跟踪器。

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件