2016-08-30 62 views
1

我工作的一個API,我有幾條路線設置,即Rails 4 API,如何從JSON響應創建URL?

http://localhost:3000/phone_number_lookup/1234567890

可以返回像這樣的JSON響應:

{ 
    "AccountCode": "1234", 
    "AccountID": 13579, 
    "BalanceCurrent": "5000", 
    "Phone": "1234567890", 
    "Id": 123123, 
    "SerialNumber": "Y2K2000XY2016", 
    "MACADDRESS": "y2k2000xy2016", 
    "EQUIPMENTTYPE_Name": "Motorola DCX100 HD DVR", 
    "ADDRESS_Zip": "90210", 
    "ItemID": 12345, 
    "iVideoSystemID": 1000001 
    "id": null 
} 

的下一個「步」 API消耗將是,'給定最初返回的響應,使用這些參數中的4個,並將它們傳遞到遠程URL,然後執行一些操作。

像這樣:

http://myremoteURL.com/Service/?Param1=sSerialNumber&Param2=iVideoSystemID&Param3=sMAC&Param4=ItemID

這將是剛剛成立的那4個參數的路線一兩件事,但路線必須是初始JSON的反應是什麼隊伍。

這樣做的正確方法是什麼?

回答

2

首先,你必須將你的JSON轉換爲散列。像這樣的東西會做:

[7] pry(main)> hash=JSON.parse(json) 
=> {"AccountCode"=>"1234", 
"AccountID"=>13579, 
"BalanceCurrent"=>"5000", 
"Phone"=>"1234567890", 
"Id"=>123123, 
"SerialNumber"=>"Y2K2000XY2016", 
"MACADDRESS"=>"y2k2000xy2016", 
"EQUIPMENTTYPE_Name"=>"Motorola DCX100 HD DVR", 
"ADDRESS_Zip"=>"90210", 
"ItemID"=>12345, 
"iVideoSystemID"=>1000001, 
"id"=>nil} 

然後,你必須選擇4個參數來發送。我剛拿了最後4個參數

[14] pry(main)> chosen_params = hash.slice("ItemID", "id", "iVideoSystemID", "ADDRESS_Zip") 
=> {"ItemID"=>12345, "id"=>nil, "iVideoSystemID"=>1000001, "ADDRESS_Zip"=>"90210"} 

然後你必須把它們傳遞給你的遠程URL。這可以使用描述爲here的幫手完成。然後,你將不得不做一些像generate_url("YOUR-URL-ADDR-HERE", chosen_params)。 在這一點上,您可能需要以您需要的方式更改generate_url幫助程序,以生成所需的url。也許它應該被稱爲action第三個參數,然後將生成的URL像http://www.google.com/action?{chosen_params}

結果將是:

[23] pry(main)> generate_url("http://www.google.com", chosen_params) 
=> "http://www.google.com?ADDRESS_Zip=90210&ItemID=12345&iVideoSystemID=1000001&id=" 

希望它能幫助。讓我知道任何問題。

+0

太棒了,幫了很多,謝謝。所以,現在我在控制器中生成了一個正常運行的URL,我怎麼才能讓它暴露給API消費者呢?也就是說,現在我只是在做一個'logger.debug'在終端上吐出來。這有道理我在問什麼? – DnfD

+0

我不確定我是否理解,但爲了讓它暴露給消費者,您應該將其作爲響應的一部分給予他(單獨的JSON字段) – Phil

+0

「Jason Noble」的答案似乎很明智。 – Phil

0

你能修改JSON響應嗎?

{ 
    "AccountCode": "1234", 
    "AccountID": 13579, 
    ... 
    "id": null 
    "follow_up_url": "http://myremoteURL.com/Service/?Param1=sSerialNumber&Param2=iVideoSystemID&Param3=sMAC&Param4=ItemID" 
} 

這可以讓您的JSON告訴請求者「下一步要去哪裏」。