Friday, February 9, 2018

Http API 使用 query string / header 來傳送 json

公司的一隻 http API 的設計是這樣子:
(1) 會接受 http POST
(2) http body 是 xml
(3) 其它的 meta data 是透過 query string 來傳遞。

meta data 的參數有一些是字串、有一些是整數。然而,API 端將這些 query string 解析出來的時候,資料型別的資訊卻早已不復存在,全都變成了字串。這是因為 http query string 並沒有支援資料型別的表示法。

那…是否可以把資料先用 json 來表示,再將 json 塞進其中一個 query string 又或是 http header 呢?如此發送端就可以把資料的型別也一併送到接收端了。

查了 stackoverflow 之後,這些問題也有人討論了,建議的解法如下:
(a) 如果 json 要放入 http header 的話,json 先做 base64 編碼,再放入 http header 。JSON web token 就是使用 base64
(b) 如果 json 要放入 query string 的話,json 先做 URLencode ,再收入 query string 。但是,必須要注意 URL 長度限制的問題。