在 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

留言