lordsling/api-response

dev-main 2021-11-07 22:08 UTC

This package is not auto-updated.

Last update: 2024-09-24 09:48:54 UTC


README

一组从API返回响应的辅助工具,以便更清晰地表达

api-response

安装

通过Composer安装此包

$ composer require lordsling/api-response

不需要额外的设置。辅助文件通过"autoload"属性自动加载composer.json文件

配置

使用Artisan命令发布配置文件

$ php artisan vendor:publish --provider="Lordsling\ApiResponse\ApiResponseServiceProvider"

检查config/api-response.php并阅读其中的注释,如果需要的话。

示例响应API

{
    "success": true,
    "payload": null,
    "errors": []
}

用法

2xx 成功 "success": true

HTTP 200 OK

/**
 * @param null $payload
 */
return ok($payload);

HTTP 200 OK

/**
 * @param null $payload
 */
return error($payload);

HTTP 200 OK

/**
 * @param null $payload
 */
return fail($payload);

HTTP 201 Created

/**
 * @param null $payload
 */
return created($payload);

HTTP 202 Accepted

/**
 * @param null $payload
 */
return accepted($payload);

HTTP 204 No Content

/**
 */
return noContent();

3xx 重定向

HTTP 301 Moved Permanently

/**
 * @param $newUrl
 */
return movedPermanently($newUrl);

HTTP 302 Found

/**
 * @param $url
 */
return found($url);

HTTP 303 See Other

/**
 * @param $newUrl
 */
return seeOther($newUrl);

HTTP 307 Temporary Redirect

/**
 * @param $tempUrl
 */
return temporaryRedirect($tempUrl);

4xx 客户端错误 "success": false

HTTP 400 Bad Request

/**
 * @param null $payload
 */
return badRequest($payload);

HTTP 401 Unauthorized

/**
 * @param null $payload
 */
return unauthorized($payload);

HTTP 402 Payment Required

/**
 * @param null $payload
 */
return paymentRequired($payload);

HTTP 403 Forbidden

/**
 * @param null $payload
 */
return forbidden($payload);

HTTP 404 Not Found

/**
 * @param null $payload
 */
return notFound($payload);

HTTP 405 Method Not Allowed

/**
 * @param null $payload
 */
return methodNotAllowed($payload);

HTTP 406 Not Acceptable

/**
 * @param null $payload
 */
return notAcceptable($payload);

HTTP 410 Gone

/**
 * @param null $payload
 */
return gone($payload);

HTTP 413 Payload Too Large

/**
 * @param null $payload
 */
return payloadTooLarge($payload);

HTTP 422 Unprocessable Entity

/**
 * @param null $payload
 */
return unprocessableEntity($payload);

HTTP 426 Upgrade Required

/**
 * @param null $payload
 */
return upgradeRequired($payload);

HTTP 429 Too Many Requests

/**
 * @param null $payload
 */
return tooManyRequests($payload);

5xx 服务器错误 "success": false

HTTP 500 Internal Server Errors

/**
 * @param null $payload
 */
return internalServerError($payload);

HTTP 501 Not Implemented

/**
 * @param null $payload
 */
return notImplemented($payload);

HTTP 502 Bad Gateway

/**
 * @param null $payload
 */
return badGateway($payload);

HTTP 503 Service Unavailable

/**
 * @param null $payload
 */
return serviceUnavailable($payload);

HTTP 504 Gateway Timeout

/**
 * @param null $payload
 */
return gatewayTimeout($payload);

HTTP 507 Insufficient Storage

/**
 * @param null $payload
 */
return insufficientStorage($payload);

可用方法

withHeaders

/**
 * @param array $headers
 */
->withHeaders([
    ['HeaderName' => 'value'],
    //...
]);

withErrors

/**
 * @param array $headers
 */
->withErrors([
    [
        'code' => 'code',
        'message' => 'message'
    ],
    //...
]);

withMeta

/**
 * @param $request
 * @param null $callback
 */
->withMeta($request, function ($request) {
    return ['query' => $request->query()];
});

withValidation

App/Exceptions/Handler.php

public function render($request, Throwable $e)
{
    if ($e instanceof ValidationException) {
        return unprocessableEntity()->withValidation($e);
    }
}

withTrace

App/Exceptions/Handler.php

public function render($request, Throwable $e)
{
    return internalServerError()
    /**
     * @param $exception
     */
    ->withTrace($e);
}

withMergeErrors

/**
 * @param ...$errorCodes
 */
->withMergeErrors(1000, 1001, 1002, /*...*/);
                    or
->withMergeErrors([1000, 1001, 1002, /*...*/]);

addError

/**
 * @param $code
 * @param string|null $message
 * @param array|null $details
 */
->addError(1000, 'Custom error message', ['details' => '...', //...]);

变更日志

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

贡献

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

许可

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