아주 오랜만에 SpringnoteResources - 스프링노트 루비 라이브러리의 버전을 올렸다. 이번 버전부터는 스프링노트 사용자 ID 1번인 ias님이 작업에 참여하셨다. 루비포지 입성을 환영합니다 :)

 

설치는 역시나 간편하다.

 

  1. sudo gem install springnote_resources

 

이번 버전에서는 편하게 사용할 수 있도록 액티브 리소스 라이브러리를 확장했다. 개발 노하우가 될 수도 있을 것 같아 여기서 그 내용을 공유한다.

 

ActiveResourceExtension

최근 스프링노트에 여러 페이지를 한번에 조회할 수 있는 기능이 추가되었다. 아래 URL처럼 매개변수 identifiers에 콤마로 구분한 페이지 식별자들을 넘겨주면 페이지를 한번에 조회할 수 있다.

 

  1. https://api.springnote.com/pages?identifiers=1,2,3&detail=true

 

액티브 리소스로 표현하면 아래와 같은 코드가 된다.

 

  1. Springnote::Page.find(:all, :params => { :identifiers => '1,2,3', :detail => true })

 

이번 버전에서는 ActiveResourceExtension 모듈을 이용해 아래처럼 쓸 수 있다.

 

  1. Springnote::Page.find(1,2,3)

 

훨씬 간단하고 보기도 편하다. 이 외에도 :params를 생략해도 되도록 했다. 예를 들어 이런 코드라면,

 

  1. Springnote::Page.find(:all, :params => { :sort => 'title', :order => 'desc', :count => 10, :offset => 5 })

 

줄여서 아래처럼 쓸 수 있다.

 

  1. Springnote::Page.find(:all, :sort => 'title', :order => 'desc', :count => 10, :offset => 5)

 

작은 변화지만, 개발하는 입장 또는 코드를 읽어야하는 입장에서는 훨씬 간결함을 느낀다. PATCH로 만들어 제출할 생각이다. 어떻게 구현했는지 궁금하다면 springnote_resources/lib/exts/active_resource_extension.rb를 살펴보시라.

 

아, 참고로 위 코드에서 사용한 sort, order, count, offset 등은 최근에 스프링노트 API에 추가된 기능이다. 페이지 리소스의 목록을 얻을 때 소팅을 하고 범위를 지정할 수 있다. 유용하게 사용할 수 있을거라 생각한다.

 

CommonParameters

스프링노트 API를 사용할 때, 사용자가 자신의 개인 노트에 접근하는 경우는 상관없지만 남의 노트, 혹은 그룹노트를 사용할 때는 _domain 매개변수를 항상 함께 보내줘야한다. 그래서 호출이 일어나는 모든 메서드에 :params => {:_domain => 'deepblue'}와 같은 코드를 중복해서 넣어줘야하는 불편함이 있다. 이런 문제를 해결하고자 CommonParameters라는 모듈을 만들었다. 사용법은 이렇다.

 

  1. ActiveResource::Connection.common_params[:_domain] = 'deepblue'

 

이렇게 하면 앞으로 모든 호출에 _domain=deepblue라는 매개변수가 함께 전달된다. 혹시 API에서 요구하는 공통 매개변수가 있다면 이 코드를 재활용할 수 있겠다. 코드는  springnote_resources/lib/exts/common_parameters.rb에 있다.

 

릴리즈 후기

액티브리소스에 연관 관계(Association)을 표현하는 방법과 이를 잘 포장해주는 프락시(Proxy)가 없는게 아쉽다. 다음에는 이 쪽을 구현해서 아래와 같은 코드를 쓸 수 있으면 어떨까 싶다.

 

  1. Springnote::Page.find(144).attachments.import "temp.txt"

 

매번 HTTP 호출이 수반되는 액티브 리소스에 연관은 좀 어울리지 않아보지만, 액티브레코드의 QueryCache 처럼 투명한 캐싱 레이어가 있다면 이것도 괜찮지 않을까 하는 생각이 든다. 다음에 시간과 열정이 생길 때 한번 구현해봐야겠다.

 

여러차례 말하지만 액티브리소스는 무척이나 가지고 놀기 좋은 장난감이다. 혹시 좀 액티브 리소스에 대해 약간 더 자세한 이야기가 듣고 싶다면 지웅님이 훌륭하게 번역을 마친 '자바개발자를 위한 레일스'에 레일스 2.0과 리소스 중심 개발이라는 주제로 내가 쓴 글을 한번 읽어보기를 권한다. 1월말에 서점에서 만나볼 수 있을거라고 한다. 이 책에 대한 서평은 정말 책이 나온 이후에 하자.

 

 

1 Response to “SpringnoteResources 0.4 - 액티브 리소스를 확장하다”

  1. deepblue Says:
    (myRuby.net) 도메인을 지정한 파라메터 오류를 수정한 0.4.1(긴급패치^^)와 Page.import_file, Attachment.import_file 파일 업로드 메서드를 구현한 0.5 버전을 릴리즈했습니다.

Leave a Reply

Website

Email