HTTP中GET或PUT方式传body数据

当我们在使用restful api风格写接口的时候,我们可能会这样

  • GET 查询操作
  • POST 新增操作
  • PUT 更新操作
  • DELETE 删除操作

我们知道
GET PUT DELETE 传参方式为params
POST 传参方式为body

当我们有一个PUT方法更新用户信息的接口/user/{user_id},当更新用户头像时可能需要在body中传递头像文件,那这时怎么办呢?

两种方案

大多数框架中都对这两种方法做了处理

  1. 使用post方法,并在body中添加参数_method = put
  2. 使用post方法,并在header中添加参数X-HTTP-METHOD-OVERRIDE = put
例子

表单中

...

postman中


header中设置.jpg
body中设置.jpg

我们看laravel框架对这两种方法的处理

public function getMethod()
    {
        if (null === $this->method) {
            $this->method = strtoupper($this->server->get('REQUEST_METHOD', 'GET'));

            if ('POST' === $this->method) {
                if ($method = $this->headers->get('X-HTTP-METHOD-OVERRIDE')) {
                    $this->method = strtoupper($method);
                } elseif (self::$httpMethodParameterOverride) {
                    $method = $this->request->get('_method', $this->query->get('_method', 'POST'));
                    if (\is_string($method)) {
                        $this->method = strtoupper($method);
                    }
                }
            }
        }

        return $this->method;
    }

首先获取REQUEST_METHOD请求方法,然后判断如果是post,查找是否设置X-HTTP-METHOD-OVERRIDE,如果设置了,返回X-HTTP-METHOD-OVERRIDE设置的方法,否则去找body中的_method

你可能感兴趣的:(HTTP中GET或PUT方式传body数据)