當(dāng)我們?cè)谑褂胷estful api風(fēng)格寫(xiě)接口的時(shí)候,我們可能會(huì)這樣
-
GET查詢(xún)操作 -
POST新增操作 -
PUT更新操作 -
DELETE刪除操作
我們知道
GET PUT DELETE 傳參方式為params
POST 傳參方式為body
當(dāng)我們有一個(gè)PUT方法更新用戶(hù)信息的接口/user/{user_id},當(dāng)更新用戶(hù)頭像時(shí)可能需要在body中傳遞頭像文件,那這時(shí)怎么辦呢?
兩種方案
大多數(shù)框架中都對(duì)這兩種方法做了處理
- 使用post方法,并在body中添加參數(shù)
_method = put - 使用post方法,并在header中添加參數(shù)
X-HTTP-METHOD-OVERRIDE = put
例子
表單中
<form method="post" ...>
<input type="hidden" name="_method" value="put" />
...
postman中

header中設(shè)置.jpg

body中設(shè)置.jpg
我們看laravel框架對(duì)這兩種方法的處理
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請(qǐng)求方法,然后判斷如果是post,查找是否設(shè)置X-HTTP-METHOD-OVERRIDE,如果設(shè)置了,返回X-HTTP-METHOD-OVERRIDE設(shè)置的方法,否則去找body中的_method。