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"。
我正在开发一个 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"。