HTTP中GET或PUT方式傳body數(shù)據(jù)

當(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ì)這兩種方法做了處理

  1. 使用post方法,并在body中添加參數(shù)_method = put
  2. 使用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。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容