snappdoctor/php-rest-response

1.1.1 2021-02-17 23:05 UTC

This package is auto-updated.

Last update: 2024-09-18 06:47:18 UTC


README

Total Downloads Latest Stable Version License License

PHP-REST-RESPONSE

PHP标准响应结构,用于统一微服务之间的响应。

需求

  • 最低PHP版本:7.0.0

安装

composer require ajangi/php-rest-response

如何使用?

成功响应示例

...
use Symfony\Component\HttpFoundation\Response;
use DrResponse\DrResponse;
...

public function index(): Response
    {
        $status_code = Response::HTTP_OK;
        $result = DrResponse::SUCCESS_RESPONSE;
        $data = ['users' => "List of users for example"];
        $messages = [];
        $developer_message = '';
        $response = new DrResponse($status_code,$result,$data,$messages,$developer_message);
        return $response->send();
    }

上述代码简单地返回

{
    "status_code": 200,
    "result": "SUCCESS",
    "developer_message": "",
    "messages": [],
    "data": {
        "users": "List of users for example"
    }
}

或者你可以简单地使用

...
use Symfony\Component\HttpFoundation\Response;
use DrResponse\DrResponse;
...

public function index(): Response
    {
        return (new SuccessResponse())->send();
    }

来获取

{
    "status_code": 200,
    "result": "SUCCESS",
    "developer_message": "",
    "messages": [],
    "data": []
}

错误响应示例

...
use Symfony\Component\HttpFoundation\Response;
use DrResponse\DrResponse;
...

public function index(): Response
    {
        $status_code = Response::HTTP_NOT_FOUND;
        $result = DrResponse::ERROR_RESPONSE;
        $data = [];
        $messages = [
            'entity' => ['entity not found!'] // This structure is recommended
        ];
        $developer_message = 'Dear Front-End developer! You may have a typo!';
        $response = new DrResponse($status_code,$result,$data,$messages,$developer_message);
        return $response->send();
    }
// or simply use 
...
use Symfony\Component\HttpFoundation\Response;
use DrResponse\NotFoundErrorResponse;
...

public function index(): Response
    {
        $messages = [
            'entity' => ['entity not found!'] // This structure is recommended
        ];
        $developer_message = 'Dear Front-End developer! You may have a typo!';
        return (new NotFoundErrorResponse($messages, $developer_message))->send();
    }

上述代码片段简单地返回

{
    "status_code": 404,
    "result": "ERROR",
    "developer_message": "Dear Front-End developer! You may have a typo!",
    "messages": {
        "entity": [
            "entity not found!"
        ]
    },
    "data": []
}

扩展新类

例如,假设你想定义一个用于403访问被拒绝响应的类

// define a new class like this
<?php

namespace App;

use DrResponse\DrResponse;
use Symfony\Component\HttpFoundation\Response;

class ForbiddenErrorResponse extends DrResponse
{
    public function __construct()
    {
        $status_code = Response::HTTP_FORBIDDEN;
        $result = DrResponse::ERROR_RESPONSE;
        $data = [];
        $messages = [
            'access' => [
                'Forbidden!!'
            ]
        ];
        $developer_message = '';
        parent::__construct($status_code, $result, $data, $messages, $developer_message);
    }
}

使用ForbiddenErrorResponse类

...
use Symfony\Component\HttpFoundation\Response;
use DrResponse\NotFoundErrorResponse;
...

public function index(): Response
    {
        return (new ForbiddenErrorResponse())->send();
    }

然后你会得到响应

{
    "status_code": 403,
    "result": "ERROR",
    "developer_message": "",
    "messages": {
        "access": [
            "Forbidden!!"
        ]
    },
    "data": []
}