设计网站api的接口

2024-10-03 13:26:34 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我正在编程一种与Grooveshark(http://grooveshark.com)接口的方法。现在我有一个Grooveshark类和几个方法,一个是与服务器的会话,另一个是基于会话的令牌,另一个是用来构造对服务器的api调用(其他方法也使用这个方法)。现在我是这样用的。。。。注意在twisted中使用twisted和t.i.defer

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

我发现这种不和谐和丑陋的感觉,即使在初始化类之后,你必须首先调用两个方法,否则其他方法将无法工作。为了解决这个问题,我试图让创建api调用的方法处理会话和令牌。目前这两个方法(session和token方法)设置类变量,不返回任何东西(当然没有)。所以我的问题是,在与需要令牌和会话的站点交互时,是否有一种通用的设计?另外,令牌和会话是从服务器上检索的,因此我不能让它们在init方法中运行(因为在进行api调用之前,它可能会阻塞或无法运行)


Tags: 方法lambda服务器comtokenapihttpget
2条回答

I find this unpythonic and ugly sense even after initializing the class you have to call two methods first or else the other methods won't work.

如果是这样,那么为什么不把get_session部分放在类的__init__中呢?如果它总是必须在任何事情之前完成,这似乎是有道理的。当然,这意味着调用该类将仍然返回一个不可用的实例,这在异步事件驱动编程中是不可避免的。。。您不会“在实例准备好使用之前阻塞”。在

一种可能是在调用类时将callback作为参数传递给该类;一种更扭曲的普通方法是,Grooveshark是一个返回延迟的函数(您将把要执行的回调添加到延迟的回调中,并在该实例最终准备好使用时用实例作为参数调用它)。在

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

相关问题 更多 >