2016-08-30 4 views
1

, 즉 지금과 같은 JSON 응답을 반환 할 수 있습니다 Rails 4 API, JSON 응답에서 URL을 만드는 방법은 무엇입니까? 나는 몇 가지 경로 설정이 내가 API에서 일하고 있어요

http://localhost:3000/phone_number_lookup/1234567890

:

{ 
    "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)과 같은 것을해야합니다. 이 시점에서 필요한 URL을 생성하는 데 필요한 방식으로 generate_url 도우미를 변경하고자 할 수 있습니다. 아마 결과가 될 것입니다 후 http://www.google.com/action?{chosen_params}

같은 URL을 생성합니다 action라는 세 번째 매개 변수를 사용한다 :

[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이 요청자에게 "다음으로 갈 위치"를 알릴 수 있습니다.