为什么大多数restful-api都要求使用POST

发布时间 2023-08-01 11:04:21作者: zh7314

2023年6月20日13:50:56

1,因为前后端对http的认识差异比较大,而且很多前端开发有些是培训速成或者其他行业转过来的,所以基础知识差异大,你要求他们具备和后端一样的基础知识水平,不太可能

2,http协议支持的方法 GET方法:获取资源,POST方法:传输实体主题,PUT方法:传输文件,HEAD方法:获取报文首部,DELETE方法:删除文件,OPTIONS方法:询问支持的方法
http的头部code的200系列,300系列,400系列,500系列,如果你完全按照http协议标准写后端接口无可厚非,但是为了避免相关问题,比如系统错误你就返回个4XXhttp header code前端就以为是浏览器错误页面,直接认为是接口出错,所有为了平衡这个水平差异一般都建议改成

 public function success(mixed $data = '', string $msg = '操作成功')
    {
        return response()->json(['code' => GlobalCode::SUCCESS, 'msg' => $msg, 'data' => $data]);
    }

    public function fail(Exception $e, $status = 200, array $headers = [])
    {
        if (request()->debug == env('DEBUG', GlobalCode::DEBUG) || env('DEBUG') == GlobalCode::DEBUG) {
            return response()->json(['code' => GlobalCode::FAIL, 'msg' => $e->getMessage(), 'data' => $e->getTraceAsString()], $status, $headers);
        } else {
            return response()->json(['code' => GlobalCode::FAIL, 'msg' => $e->getMessage(), 'data' => $e->getMessage()], $status, $headers);
        }
    }

    public function grant(Exception $e)
    {
        if (request()->debug == env('DEBUG', GlobalCode::DEBUG) || env('DEBUG') == GlobalCode::DEBUG) {
            return response()->json(['code' => GlobalCode::GRANT, 'msg' => $e->getMessage(), 'data' => $e->getTraceAsString()]);
        } else {
            return response()->json(['code' => GlobalCode::GRANT, 'msg' => $e->getMessage(), 'data' => $e->getMessage()]);
        }
    }
	
	
interface GlobalCode
{
    //接口返回成功
    const SUCCESS = 200;
    //返回错误
    const FAIL = 400;
    //需要授权
    const GRANT = 401;
	}

统一返回,json http code 200 用json的格式的code来区分状态

3,除了http基础知识的差别之外,还有一个问题就是统一请求和返回,避免后续接口维护的成本,假设你按照http协议的标准写完接口,之前的前端离职了,你还得给新的来的前端在解释一遍,前端得吧http协议学一遍才能理解你的接口为什么这些写,在就是和第三方对接的一般都是采用GET和POST,你整个其他的有些刚入门的后端也无法理解

4,还有一个问题也不是不容忽视的,就是get和post协议的相对安全性来说,虽然现在都是https,但是从请求可以带的数据量和安全性来说post更好