2010-07-13 2 views
2

나는 공개적으로 공개 될 Viddler에 대한 API 래퍼 작업을하고 있으며 특히 Rails 응용 프로그램 내에서의 사용을 염두에두고 인증/API 키를 처리하는 가장 좋은 방법을 찾아 내려하고 있습니다.Ruby API 래퍼에 대한 인증 처리 방법은 무엇입니까?

단지 새로운 클라이언트 매번 작성하는 코드를 가지고하는 것입니다 래퍼를 작성하고, 개발자가 나중에 사용하기 위해 일정에 API 키를 저장할 수있는 가장 쉬운 방법 :

@client = Viddler::Client.new(VIDDLER_API_KEY) 

문제와 클라이언트 객체를 생성하고 API 키를 전달해야하는 것은 다소 무리가 있습니다. 사용자 인증을 믹스에 포함 시키면 훨씬 더 복잡해집니다.

환경 파일에 설정된 모든 API 키와 인증이 before_filter에서 수행 될 것이라고 생각합니다.

Viddler::Client.api_key = 'abc123' 
Viddler::Client.authenticate! 'username', 'password' 

Viddler::Client는 클래스 변수에이를 저장하는 것입니다, 당신은 매개 변수없이 Viddler::Client.new를 호출하고 인증 된 통화를 할 수 있습니다. 한가지 염려해야 할 것은 클래스 변수가 요청간에 지속되므로 개발자가 각 요청 전후에 인증을 제거해야한다는 것을 의미합니다.

의견이 있으십니까?

답변

1

API 키를 전역으로 저장하면 확실히 유용 할 것이고 확실하게 그런 종류의 정보를 얻을 수있는 방법입니다. 반면에 사용자 인증은 사용자에게 "after_filter :reset_viddler_auth을 추가하도록 보장"한다고 말하면 예기치 않은 보안 위험을 초래할 수 있으므로 전 세계적으로 저장해서는 안됩니다. 당신은 두 세계의 최고를했습니다 그런

# in a config/initializer/*.rb file or something 
Viddler::Client.api_key = "abc123" 

# in the controller/action/model/wherever 
@client = Viddler::Client.new # anonymous 
@client.authenticate!("username", "password") # authenticate anon client 

@client_auth = Viddler::Client.new("username", "password") # authenticated client 

추측 : 어쩌면, 그래서

@client_other = Viddler::Client.new("username", "password", :api_key => "xyz890") 

... 그냥 내 2 센트 같은 다른 API 키를 사용하여 새 클라이언트를 만들 수있는 방법을 제공 .

PS : 확실하지 않은 방법 - - 날짜는하지만, 단지 참고로, 이미 루비 viddler 래퍼있다, 당신의 응답을 http://viddler.rubyforge.org/rdoc/

+0

감사합니다! 원래 질문에서 언급해야 할 한 가지는 모델 기반 래퍼도 빌드하는 것이므로 다음과 같은 일을 할 수 있습니다. 'Viddler :: Video.find_by_username ('kyleslat ')'. 이것은'viddler.videos.getByUser' 호출을 호출합니다.이 호출은 인증 될 수 있는지 없는지를 나타냅니다. 내가 어떤 종류의 글로벌 세션 (Viddler :: Client.session' 또는 당신이 언급 한 문제가있는 것)이 필요하거나, 어떻게 든 클라이언트/세션을 따라 간다. Viddler :: Video.find_by_username (' kyleslat ', @client)'. –

+0

그리고 다른 래퍼에 관해서 - 저는 사실 Viddler의 직원이고, 기존 래퍼는 시대에 뒤 떨어지는 것이므로 공식적인 것을 구축하기로 결정했습니다. –

+0

mhh이므로 AR API와 같이 만들지는 않을 것입니다. 물론 AR의 연결과 같은 글로벌 세션 객체를 추가 할 수는 있지만, 미숙 한 사용자가 API를 사용할 수도 있습니다. 틀린 (즉, 세션 정보를 지우지 않거나 비슷하게). 'Viddler :: Video.find_by_username ('kyleslat', @session)'또는'Viddler :: Session.authorized ('user', 'pass') do .... end'에 대해 말하자면, 또한 다른 Ruby API에서 문제를 다루는 방법을 살펴보십시오. 추신 : 귀하의 API를 가지고 놀고 싶습니다 :) – lwe