如何编写Python API包装器?

22

我希望编写一个Python库,用于封装特定Web服务提供的REST风格的API。是否有任何好的学习资源可供中级Python程序员使用?

我需要一篇关于此主题的好文章,但如果只有漂亮、清晰的代码示例也可以。

澄清:我想要做的是编写一个Python客户端来与Web服务交互 - 构建HTTP请求和解析XML/JSON响应,所有这些都包装在Python对象中。


听起来你想要输入:app.users.john.name(),并且它能够转到http://myapp.com/api/users/john/name的网址,并且理解响应? - Richard Levasseur
你对如何在REST风格API之上设计或实现Python API感兴趣吗? - jfs
1
@Richard,那将是RPC,而不是REST。您不能在具有REST API的客户端中硬编码资源URI或URI模式。它需要通过超文本发现URI。只应该有一个硬编码的URI,即服务的入口点。否则,您将违反REST的约束,并且它只是RPC,具有所有耦合。 - aehlke
@RichardLevasseur,你有任何想法如何做到这一点吗? - z9fr
5个回答

3
我无法为您提供如何进行此操作的任何文章,但我认为有几个库可以作为设计自己的库的好模型。例如PyAws。我没有看过源代码,所以无法告诉您它的代码示例有多好,但他们网站中的功能和使用示例应该是一个有用的设计模型。另外Universal Feed Parser不是一个webservice的包装器(它是一个RSS解析器库),但它是一个非常好的例子,它优先考虑了使用灵活性和隐藏实现细节的设计。我认为你可以从中得到非常好的使用思路来设计你的包装器。

feedparser 看起来很不错,确实。 - jfs

2

我的最爱组合是httplib2(或者为了更好的性能,可以选择pycurl)和simplejson。由于REST更多地是一种设计方式而不是一个真正的“协议”,所以我并不知道是否有可重用的东西。在Ruby中,你可以使用ActiveResource。但说实话,即使这样,也只是将一些表格暴露为Web服务,而xml/json的优势在于它们更像是针对你的应用程序进行优化的“视图”,可以包含多个对象。希望这样讲清楚了 :-)


正确的,没有可重用的东西,因为REST是一种架构。 - aehlke
更准确地说,REST是“构建Web架构的一种方式”,也被称为元架构。 - csparpa

0

这个教程页面可能是一个不错的起点(但它并不包含你需要的一切)。


0
你可以看看pythenic jobs,这是一个不错的例子,它是一个简单而完整的“Python封装Authentic Jobs...API”的包装器。这正是我现在正在做的事情 :)

0
你应该看一下 PyFacebook。这是一个用于 Facebook API 的 Python 封装,它是我使用过的最好的 API 之一。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接