在 HTTP GET 方法中是否能夠接受 Body 資料

前幾天收到一個需求,之前我們提供的 API 對方現在說在 .NET 中不方便直接在 GET 方法中使用 Body 夾帶參數,希望可以調整成其他方式。

在 RFC 2616 (已過期)的規範中並沒有規定 Http Get 方法不能有 Body,在 RFC 7230 規範中也是。

主管的意思是我們開的 API 是這樣,之前也有詢問有沒有需要調整的部分,所以現在應該不太需要特別調整。

這件事情讓我想到在軟體開發中有個原則叫做 Robustness principle ,簡要的說明是在你所做的事情要保守,從他人接收的事情要自由。也可以說是發送的內容要保守,接受的內容要自由。

或許在對方的情境中在 Get 方法不太容易附加 Body 資料,也或許已經過了最佳調整時機,不過在 API 的共識中似乎 Get 就是鮮少有使用 Body,最後的解決方式就是放在 Header 中,這樣在未來有更多需要存取 API 的系統中也比較不會遇到問題,方便系統串接。

參考資料:
Wiki - Robustness principle

留言