beego開發web服務+fiddler模擬Post請求+以json型別傳送資料
最近在做一個告警傳送郵件服務,用到了go+beego。首先為什麼要做成一個服務的形式呢,因為服務的話基於某個協議,如http協議,定義一個資源,如一段文字、一張圖片、一首歌曲、一種服務,然後呼叫者可以用其需要用的語言,如java、scala、go等,而提供此服務的方法只需要編寫一次。如果不是服務的形式,就得呼叫者用java你得給他寫個java的服務流程,呼叫者用scala你得給他寫個scala的服務流程。
首先,為什麼用beego呢,因為beego是基於RESTful架構的。那麼什麼是RESTful架構呢,網上有很多解釋,這裡就不多說了,只記錄一下從網上搜集來的比較經典的幾條:
1、增刪改查都是一個URL地址,具體靠http頭部資訊判斷;
2、http協議實現的函式宣告
3、利用htttp協議語義構建的語義化、可快取的介面
4、就是一個RPC模型
5、URL定位資源,用http動詞(Get、Post、Delete等)描述操作
也就是說,所有基於RESTful架構的框架,都是隻需要服務提供者編寫響應的Get、Post等函式就可以了,然後呼叫者如果傳送的是Get請求就會自動執行Get函式,如果傳送的是Post請求就會自動執行Post函式。
然後,要了解http動詞Get、Post請求。兩者區別網上也有很多,這裡不再贅述。經典的幾條是:
1、Get請求的引數是寫到URL地址中,可以通過在瀏覽器中直接輸入URL呼叫執行,是所有人可見的,so不安全;
2、Post請求的引數是寫在Request Body中的(具體格式網上有),不能通過在瀏覽器中直接輸入URL呼叫執行,比較安全(同時也比較麻煩o(╯□╰)o)。
我這裡是要呼叫者將使用者資料以json形式通過Post請求給出郵件的接收者和抄送者以及郵件主題和內容,所以在寫好了Post函式之後進行測試的時候,需要模擬Post請求,於是下載了一個叫fiddler的東東。
fiddler模擬Post請求其實也挺簡單的:
主要就是注意4個地方:
1、下拉框中選擇Post;
2、複製URL地址;
3、Content-Type:application/json;charset=utf-8
4、RequestBody寫輸入資料的json格式
最後,如果result中返回200,即說明成功了。
哦,對了,前提是將beego run起來,我在IDEA中直接點run按鈕不行,必須到命令列或者是IDEA的Terminal裡面敲命令:“bee run 專案名稱” 才行
如上圖所示,最終顯示http server Running on:8080,表示對8080埠進行監聽。即是如果你在fiddler裡面的URL地址的埠是8080,既可以執行此框架中的邏輯完成一定的操作功能。
呃,還有一個彩蛋,就是你必須在conf的配置檔案app.conf中設定一個引數:
表示接收Post請求的引數。不寫的話,接收不到資料的(本人吃了一上午的虧的說o(╯□╰)o)
最後,關鍵的地方就是,Post中如何接收Post請求中的json資料呢,請看官網:http://beego.me/docs/mvc/controller/params.md
我用的是如下方法:
ob是神馬?請參看《go語言程式設計》的第五章 網路程式設計的json處理部分:
嗯哪,ob是個目標容器,那麼跟json對應起來的奏是struct型別啦,但是要記得用指標(⊙o⊙)哦
最後一點:json型別和struct型別元素多少的問題,一句話:只解碼共同的部分!!!