HTTP中GET或PUT方式传body数据

2019-10-09  本文已影响0人  xxuuq

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

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

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

两种方案

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

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

表单中

<form method="post" ...>
  <input type="hidden" name="_method" value="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

上一篇 下一篇

猜你喜欢

热点阅读