0

好的,我正在编写一种与 Grooveshark ( http://grooveshark.com ) 交互的方法。现在我有一个 Grooveshark 类和几个方法,一个获取与服务器的会话,另一个获取基于会话的令牌,另一个用于构造对服务器的 api 调用(其他方法使用它)。现在我像这样使用它....注意在twisted中使用twisted和tidefer

g = Grooveshark()
d = g.get_session()
d.addCallback(lambda x: g.get_token())
## and then something like.... ##
g.search("Song")

即使在初始化类之后,我也发现这种不合常理和丑陋的感觉你必须先调用两个方法,否则其他方法将不起作用。为了解决这个问题,我试图得到它,以便创建 api 调用的方法负责会话和令牌。目前这两种方法(会话和令牌方法)设置类变量并且不返回任何内容(以及无)。所以我的问题是,在与需要令牌和会话的网站交互时是否使用了通用设计?此外,令牌和会话是从服务器检索的,因此我不能让它们在init方法中运行(因为它会阻塞或在进行 api 调用之前可能不会完成)

4

2 回答 2

3

即使在初始化类之后,我也发现这种不合常理和丑陋的感觉你必须先调用两个方法,否则其他方法将不起作用。

如果是这样,那为什么不把这get_session部分放在你的班级里__init__呢?如果它总是必须在其他任何事情之前执行,那似乎是有道理的。当然,这意味着调用该类仍将返回一个尚不可用的实例——这对于异步事件驱动编程来说是不可避免的……你不会“在实例准备好使用之前阻塞”。

一种可能性是在调用时将回调作为参数传递给类;一个更正常的 Twisted 将Grooveshark是一个返回延迟的函数(您将添加到延迟执行的回调,并在该实例最终准备好使用时以实例作为参数调用它)。

于 2010-08-10T00:08:45.533 回答
0

我强烈建议您查看Facebook 图形 API。仅仅因为您需要会话和一些身份验证并不意味着您可以构建一个干净的 REST API。Facebook 使用 OAuth 来处理身份验证,但还有其他可能性。

于 2010-08-10T00:22:57.060 回答