IT踩坑日常- API格式(x-www-form-urlencoded)

更新於 2024/04/18閱讀時間約 5 分鐘

前言

因前陣子在工作上遇到一些[特別]的廠商遇到了一些[特別]的例子,讓我心有餘悸希望之後有踩到坑的同仁可以少跌一些坑。

此次主要業務是與廠商做API介接,但對方的

API(Post)-Request的Body是用x-www-form-urlencoded 格式

單位代碼(dep_id) 
總筆數(all_count)
list []:票號約定清單
異動別(tran_code)(A=增加,D=刪除)
票號(tkt_no)
票種(tkt_tp)(01=成人,02=愛心,03=團體)​


API(Post)-Response是用Json格式

result: 成功與否(true/false) 
all_count:總筆數
list []:票號約定回傳清單
tran_code:異動別(A=增加,D=刪除)
tkt_no:票號
tkt_tp:票種(01=成人,02=愛心,03=團體)
dep_id:單位代碼
date:約定日期/傳輸日期
status:狀態(00=異動成功,01=異動失敗)


踩坑過程

在x-www-form-urlencoded 格式中表現的方式是以Key-Value的方式來呈現,與Json把整個資料表達成一個字串的方式不同,在撰寫Request時在前面兩個屬性dep_id/all_count都還沒甚麼問題,但到了一個Array[Object]的結構時,可能我下的指令也沒有很精確,因為Copilot其實也是回我類似的結構寫法。

我以為的Key-Value表示式

(C# 撰寫為例)

var req = new Dictionary<string, string> 
{
{ "dep_id", request.Bank_Id },
{ "all_count", $"{request.All_Count}" },
{ "list", JsonConvert.SerializeObject(request.List) }
};

我以為的Key-Value表示式是這樣(Postman 測試為例)

raw-image


實際上的array[object] Key-Value表示式

是這樣(C# 撰寫為例):

var req = new Dictionary<string, string> 
{
{ "dep_id", request.Bank_Id },
{ "all_count", $"{request.All_Count}" }
};

var count = 0;
foreach (var item in request.List)
{
req.Add($"list[{count}][{nameof(item.Tran_Code).ToLower()}]", item.Tran_Code);
req.Add($"list[{count}][{nameof(item.Tkt_No).ToLower()}]", item.Tkt_No);
req.Add($"list[{count}][{nameof(item.Tkt_Tp).ToLower()}]", item.Tkt_Tp);
count++;
};

實際上的array[object] Key-Value表示式是這樣(Postman 測試為例):

raw-image


疑點

在撰寫 array[object] 這塊表示式時,浪費了一部分時間,主要是因為在寫這個寫法之前,我還有嘗試另種寫法就是在讀取object的Member值的時候,照理說可以用 item.Tran_Code 或是 item[Tran_Code ]的方法來取值,但我不知為何用.(dot)的方式來取值對方的回應是失敗的,這點我深深不解……

如下所示(C# 撰寫為例)

var count = 0; 
foreach (var item in request.List)
{
req.Add($"list[{count}].{nameof(item.Tran_Code).ToLower()}", item.Tran_Code);
req.Add($"list[{count}].{nameof(item.Tkt_No).ToLower()}", item.Tkt_No);
req.Add($"list[{count}].{nameof(item.Tkt_Tp).ToLower()}", item.Tkt_Tp);
count++;
};


如下所示(Postman 為例)

raw-image


結語

以上是近期遇到浪費許多時間的坑,由於我是第一次遇到 x-www-form-urlencoded 的格式輸出,就當作是種學習解決後豁然開朗的感覺,但或許有人會覺得廠商沒提供範例嗎? 對,沒提供範例,請廠商提供也沒有要提供的意思,只是一直回再試試看……

共勉之


參考資料

Send Array as Part of x-www-form-urlencoded Using Postman




avatar-img
9會員
24內容數
此篇教學 : 使用GitHub架設免費的部落格網站,搭上Hexo靜態模板,在主題頁面中尋找屬於自己的風格套版,輕鬆擁有自己的Blog外,加上留言板/SEO等設定在記錄生活同時也增進與讀者的互動頻率。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
DavidHi的沙龍 的其他內容
在工作情境中手動執行SQL語法更新中文字時,有時會遇到中文字顯示問號(?)的情況。這篇文章將介紹如何解決手動執行SQL語法時造成中文顯示問號(?)的方法。
在工作情境中手動執行SQL語法更新中文字時,有時會遇到中文字顯示問號(?)的情況。這篇文章將介紹如何解決手動執行SQL語法時造成中文顯示問號(?)的方法。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
你聽過it包(it bag)嗎? 它指的可不是「它的包」,也沒有什麼太難的意義,那It包指的是最流行,每個人都不能沒有的包。你也有個IT包嗎? 至於為什麼叫It,有2種不同的說法: 說法1: 就很簡單是inevitable (不可避免,不能沒有的)的縮寫,所以it 包指的就是你不能沒有的包。就這麼簡
Thumbnail
2022.06.17 該來的還是來了, 終於來到這一天了 --> RI 經過一年來的舖陳, FCC --> RI --> PIP --> Getout 這也是預期中的事, 沒有什麼好抱怨的, 唯一給自己的台階下, 就是自己的能力就到這裡了.
Thumbnail
睇到呢度,雖然劇情好令人氣憤,但劇本就叫人拍案叫絕:呢個咪19年拗緊嘅嘢囉?政府咁大個集團,唔信佢仲信邊個?送中咪送中囉,係身有屎嘅人先要驚嘅姐。甚至連$10都唔使比,都大把人無條件支持政府,反過來斥責識得思考嘅人。民主自由呢啲嘢,大眾根本唔在乎,原來我哋重視嘅嘢,係一文不值。因為大部分人就係咁現實
Thumbnail
It steers clear of weight reduction, just to improve yourself and better! Foster these 8 positive routines together.  Numerous young ladies nearly tr
作者:科技媽媽 職業:IT業採購 資歷:16年 我任職的外商公司,企業文化中強調「人性管理」、「尊重」、 「信任」,被業界稱為「幸福企業」, 雖然公司給員工較彈性的上下班時間,公司主管也常將「work and life balance」(工作與生活平衡)掛在嘴邊,但是,一旦忙起來,依舊沒日沒夜...
我承認,我真的不是很懂…。 我曾進入台灣前三大電信業者的資訊機房,那時我懷抱一個夢想…,我想成為在機房工作的女子……。 隨著我的「夢」,真的是夢,畢竟…
我決定從門檻最低,也相對有自信的職種「システムエンジニア」著手,顧名思義…
說到上回文末的「ITコンサルタント」,我特別查了一下它的意思,「コンサルタント」是顧問的意思,所以顧名思義,此職種即為「IT顧問」。這是什麼鬼??
Thumbnail
It is written! 為什麼是命中註定? 因為 一切都早已被寫在未來裡 如果 你願意用最單純的愛去找尋 就有希望! [貧民百萬富翁]獲得2009奧斯卡八項大獎,包括最佳影片、最佳導演、最佳原創電影歌曲、最佳電影配樂、最佳音效、最佳剪輯、最佳攝影、最佳改編劇本。原著《Q&A》是印度外交
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
你聽過it包(it bag)嗎? 它指的可不是「它的包」,也沒有什麼太難的意義,那It包指的是最流行,每個人都不能沒有的包。你也有個IT包嗎? 至於為什麼叫It,有2種不同的說法: 說法1: 就很簡單是inevitable (不可避免,不能沒有的)的縮寫,所以it 包指的就是你不能沒有的包。就這麼簡
Thumbnail
2022.06.17 該來的還是來了, 終於來到這一天了 --> RI 經過一年來的舖陳, FCC --> RI --> PIP --> Getout 這也是預期中的事, 沒有什麼好抱怨的, 唯一給自己的台階下, 就是自己的能力就到這裡了.
Thumbnail
睇到呢度,雖然劇情好令人氣憤,但劇本就叫人拍案叫絕:呢個咪19年拗緊嘅嘢囉?政府咁大個集團,唔信佢仲信邊個?送中咪送中囉,係身有屎嘅人先要驚嘅姐。甚至連$10都唔使比,都大把人無條件支持政府,反過來斥責識得思考嘅人。民主自由呢啲嘢,大眾根本唔在乎,原來我哋重視嘅嘢,係一文不值。因為大部分人就係咁現實
Thumbnail
It steers clear of weight reduction, just to improve yourself and better! Foster these 8 positive routines together.  Numerous young ladies nearly tr
作者:科技媽媽 職業:IT業採購 資歷:16年 我任職的外商公司,企業文化中強調「人性管理」、「尊重」、 「信任」,被業界稱為「幸福企業」, 雖然公司給員工較彈性的上下班時間,公司主管也常將「work and life balance」(工作與生活平衡)掛在嘴邊,但是,一旦忙起來,依舊沒日沒夜...
我承認,我真的不是很懂…。 我曾進入台灣前三大電信業者的資訊機房,那時我懷抱一個夢想…,我想成為在機房工作的女子……。 隨著我的「夢」,真的是夢,畢竟…
我決定從門檻最低,也相對有自信的職種「システムエンジニア」著手,顧名思義…
說到上回文末的「ITコンサルタント」,我特別查了一下它的意思,「コンサルタント」是顧問的意思,所以顧名思義,此職種即為「IT顧問」。這是什麼鬼??
Thumbnail
It is written! 為什麼是命中註定? 因為 一切都早已被寫在未來裡 如果 你願意用最單純的愛去找尋 就有希望! [貧民百萬富翁]獲得2009奧斯卡八項大獎,包括最佳影片、最佳導演、最佳原創電影歌曲、最佳電影配樂、最佳音效、最佳剪輯、最佳攝影、最佳改編劇本。原著《Q&A》是印度外交