짧은 답변 : 귀하의 JSON 서비스에 따라 다릅니다.
처음에는 서비스가 RESTful입니까? 그렇다면 운이 좋았을 것입니다. ActiveResource는 dead이므로 코드 사용 자체는 create
및 find
과 같은 래퍼 메서드 집합을 만들기위한 좋은 출발점을 제공하여 API에 액세스하고 ActiveRecord에서 레코드를 생성하고 쿼리하는 방식으로 레코드를 조작합니다. DB. rails is built around RESTful-ness이기 때문에 API가 RESTful 인 경우 비교적 쉽습니다. 따라서 두 클래스 간의 매핑이 훨씬 더 명확 해집니다.
This article는 잘 요약 :
이
레일은 매우 쉽게 REST의 원칙을 따르고 웹 브라우저와 프로그래머블 웹과 동일하게 작동 웹 서비스를 구축 할 수 있습니다. 실제로 이러한 단순성은 이러한 원칙을 따르는 것으로부터 비롯됩니다. 우리는 고객에게 적절한 HTTP 메소드를 사용하여 작성한 리소스를 작성, 읽기, 업데이트 또는 삭제하는 방법을 알려줄 필요가 없었습니다. 우리가해야 할 일은 우리 고객을 올바른 장소로 안내하는 것입니다.
서비스가 아닌 경우 내가 생각하는 다른 질문에 대한 코멘트에서 판단하는 경우는 아마 인, 편안하고, 당신은 당신의 일이 당신을 위해 잘라해야합니다. ActiveModel은 create
이 ActiveRecord::Persistence에 정의되어 있고 find
이 ActiveRecord::FinderMethods에 정의되어 있습니다. ActiveModel에 없습니다.ActiveResource는 인터페이싱하는 서비스 유형 (즉, RESTful 및 몇 가지 다른 것들)에 대한 가정을하기 때문에이를 상당히 쉽게 재현 할 수 있습니다. 그 검증 시스템, 직렬화 메소드, 속성 변경의 더러운 추적, 콜백 (before_save
, after_save
등), 번역/현지화 : ActiveModel가 제공하는 것에
모델을 다루는 레일 매우 유용하게 만드는 다른 모든 물건 등등. 이것들은 모두 매우 유용한 기능이지만 API 호출을 래핑하는 문제는 여전히 남아 있습니다.
이
- 먼저 API를 자세히 살펴보고이되고 얼마나 가까운 알아낼 :
그래서 여기가 내 경험이 제한적이기는하지만 (즉에 대한 내 마지막 주 참조)에 따라 추천 할 것입니다 무엇 평안한. 이 아닌 경우 RESTful 인 경우 RESTful 서비스처럼 처리 할 수 있도록이 문제를 해결하는 방법을 고려해야합니다. 이를 수행하는 방법에 대한 좋은 참고 자료는 O'Reilly의 RESTful Web Services (특히 2 장 "웹 서비스 클라이언트 작성")입니다.
create
, find
및 기타 ActiveRecord와 같은 기능을 구현하는 API 래퍼를 만듭니다 있다. 실제로 Net :: HTTP로 작업하기보다 실제로 API를 요청할 때 Faraday 또는 HTTParty과 같은 보석을 사용하고 싶을 것입니다. (나는 결코 DataMapper를 사용한 적이 없기 때문에 논평 할 수 없습니다.)
- 래퍼 클래스를 레일즈 모델과 같은 것으로 만들기 위해 사용하려는 ActiveModel 요소를 모두 포함합니다 : 유효성 검사, 직렬화 등. 레일 4에서는 새로운 베어 본을 사용하여 모든 것을 실제로 포함하십시오 ActiveModel::Model.
JSON 서비스를 Rails 모델로 사용하는 방법을 많이 알게 될 것입니다.
레코드의 경우 실제로 이런 종류의 구현에 대한 경험은 XML API에 액세스하기위한 API 래퍼 (작업 중)를 작성하는 것으로 제한됩니다. 래퍼에는 API에 대한 쿼리의 유효성 검사를위한 ActiveModel 유효성 검사기가 포함 된 클래스가 있습니다. ActiveModel 유효성 검사기가 API가 올바르게 액세스되도록 보장하는데 정말 유용하다는 것을 알았지 만 래퍼는 API에서 레코드를 가져 오기위한 것이지 실제 생성하거나 업데이트하는 것이 아니므로 인터페이스가 예상보다 훨씬 쉽습니다. 너는 지어 줄거야.
종합적인 답변을 해주셔서 감사합니다. 다행스럽게도 JSON 서비스는 RESTful입니다. ActiveResource에서 예상하는 방식으로 응답하지 않는다는 것입니다. 내가 죽었다는 것을 알았으니 ActiveResource를 피할 것이고, 대신 당신이 링크 한 DZone 기사를 읽을 것이다. 다시 한 번 감사드립니다! – gjb
오, 좋은 소식입니다!이 경우 작업이 너무 어려워서는 안됩니다. ActiveResource를 사용하지 않더라도 코드가 어떻게 작동하는지 보려고 할 수도 있습니다. –
아직 작업 중이라면 도움이 될만한 몇 가지 보석이 있습니다. https://github.com/filtersquad/api_smith https://github.com/remiprev/her https://github.com/ apotonick/roar –