Rails 4 API,如何从 JSON 响应创建 URL?

Rails 4 API, how to create a URL from a JSON response?

我正在开发一个 API,其中我设置了一些路由,即

http://localhost:3000/phone_number_lookup/1234567890

这可以 return 像这样的 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 消费的下一个 'step' 是 'given the initially returned response, use 4 of those parameters and pass them into a remote URL that will then do something.'

像这样:

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

只设置一个带有 4 个参数的路由是一回事,但路由需要取决于初始 JSON 响应的内容。

正确的做法是什么?

首先,您必须将 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="

希望对您有所帮助。如有任何问题,请告诉我。

您可以修改 JSON 回复吗?

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

这允许您的 JSON 告诉请求者 "where to go next"。