headerとbodyを同時にセットできない
axiosを使用してDELETEを呼び出す際に、headerとbodyを以下のようにセットしたところうまく動作しませんでした。
axios.delete(URL, header, payload);
どうやらDELETEの場合にはPOSTのように引数を3つ取ることが出来ないようです。
headersとdataというプロパティを持つオブジェクトをセットすることで解決
以下のようにheaders,dataという2つのプロパティを持つオブジェクトを作り、2つ目の引数として渡すことで正しくヘッダーとボディがセットされました。dataのプロパティがbodyにマップされるようです。
(こちらをよく読むと書いてあります)
axios.delete(URL, {
headers: {
Authorization: authorizationToken
},
data: {
param1: param1
}
});
まとめ
ヘッダー情報とボディを用いてaxiosでDELETEを呼びだす場合には、単一のオブジェクトでラップすることで呼び出すことが可能です。
現在のHTTPの仕様上はDELETEにBodyを含めることは可能ですが、以前は許されていませんでした。API設計をする際にDELETEにBodyを含める設計を行うと、このような問題に遭遇します。必要な情報はパラメータに押し込んだほうがリスクは少ないと思われます。