我会尽量保持这一点尽可能简短和重点。在Ruby中使用REST API - 何时进行身份验证?
我正在写一个Ruby Gem,仿照Diplomat gem,这是一个围绕产品的REST API的包装。我正在使用的API使用基于令牌的身份验证; API令牌通过POST发送,并且会话作为cookie返回。我正在使用法拉第cookiejar中间件来处理由API返回的cookie。在概念上,我正在努力的问题是何时进行身份验证。
我有两个类,一个叫RestClient,一个叫Volume;后者继承前者。现在,RestClient的init方法构建一个连接对象并进行身份验证,而Volume的init方法调用super并传递路径。我的想法是,当从RestClient继承的任何类被初始化时,它将认证用户。
class RestClient
def initialize(api_path)
<build connection>
auth
end
def auth
<post token, get session cookie>
end
end
class Volume < RestClient
def initialize
super('/volume')
end
def volumes
<send GET, receive volumes>
end
end
obj = Volume.new #Creates object, authenticates user
obj.volumes #Returns list of volumes
我想我的问题是..am我走向正确的轨道?我是否应该暂缓认证直到首次在对象上调用方法,而不是在初始化时进行认证?我是否完全错误地回答了这个问题?
一个memoized AUTH我很欣赏的反馈,我很容易得太多。在每次调用API调用的方法之前,我都进行了懒惰的身份验证,随后使测试变得更加容易。我将这个标记作为一个简单的事实的答案,指出在初始化过程中进行身份验证是一种不好的模式,单凭这一建议是一个很大的帮助。 – Alayde