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
例子

表单中

<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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容