原本以為自己使用Grape gem撰寫的API,一直收不到參數值,也查不到資料庫的內容。嘗試了很多次,幾乎放棄了,今天終於找出為什麼無法顯示查到的資料庫內容。
xxx?param1=abcabc¶m2=cbacba¶m3=%E4%B8%89%E9%87%8D%E5%B8%82
,(%開頭的是中文字轉URL後的代碼);POST則用JSON格式傳參數進去,格式如{
"param1": "abcabc",
"param2": "cbacba",
"param3": "%E4%B8%89%E9%87%8D%E5%B8%82"
}
curl -H 'Content-Type: application/json -H 'Accept-Version: v1' http://localhost:3000/specified_vegetables/query -X POST -d '{"transaction_date": "20131031", "name": "金針筍", "trade_location": "三重市"}' -v
。 附帶一提:specified_vegetables
是此API範例的名稱,query是request的目標API method。 而這則是GET verb的指令範例:
curl -H 'Content-Type: application/json-H 'Accept-Version: v1' http://localhost:3000/specified_vegetables/query?transaction_date=20131031&trade_location=%E4%B8%89%E9%87%8D%E5%B8%82&name=%E9%87%91%E9%87%9D%E7%AD%8D -X GET -v
SpecifiedVegetable.where(transaction_date: params[:transaction_date], name: params[:name], trade_location: params[:trade_location])
;且在目標API method的class開始處,寫出這行內容content_type :txt, 'text/plain'
。如果要呈現JSON格式的response,則使用
{
'response' => SpecifiedVegetable.where(transaction_date: params[:transaction_date], name: params[:name], trade_location: params[:trade_location])
}
,且在目標API method的class開始處,建議寫出這行內容 format :json
,我覺得這行可有可無。
找好久,終於找到解決的方式,希望之後可以解決得更漂亮。