使用urllib3构建良好的API客户端库框架。
项目描述
一个小巧的框架,借助urllib3构建良好的API客户端库。
亮点
线程安全地重用带有Keep-Alive的连接(通过urllib3)。
代码库小巧且易于理解,非常适合扩展和构建。
内置对速率限制和请求节流的内置支持。
为Klout API和Facebook OpenGraph API提供了功能示例。
示例
如何创建自己的超级简单的客户端API库
>>> from apiclient import APIClient >>> class AcmePublicAPI(APIClient): ... BASE_URL = 'https://:1234/' >>> acme_api = AcmePublicAPI() >>> acme_api.call('/hello') {'what': 'world'} >>> acme_api.call('/echo', params={"ping": "pong"}) {'ping': 'pong'}
如何向客户端API库添加速率限制,以便每分钟不超过10个请求
>>> from apiclient import RateLimiter >>> lock = RateLimiter(max_messages=10, every_seconds=60) >>> acme_api = AcmePublicAPI(rate_limit_lock=lock) >>> # Get the first 100 pages >>> for page in xrange(100): ... # Whenever our request rate exceeds the specifications of the API's ... # RateLimiter, the next request will block until the next request window ... r = acme_api.call('/stream', page=str(page))
有关更具体的API示例,请参阅examples/目录。
扩展
为了处理不同的调用约定,apiclient可以通过子类化进行扩展。
例如,如果API要求所有参数都进行JSON编码,则可以将_compose_url方法实现如下
>>> class JSONArgsAPIClient(APIClient): ... def _compose_url(self, path, params=None): ... if params is not None: ... params = dict((key, json.dumps(val)) ... for (key, val) in params.iteritems()) ... return APIClient._compose_url(self, path, params=params)
或者如果API返回YAML而不是JSON,则可以重写_handle_response方法
>>> class YAMLResponseAPIClient(APIClient): ... def _handle_response(self, response): ... return yaml.load(response.data)
待办事项
测试。
更多文档。
更多类型的API握手,例如OAuth和OAuth2。
更多示例。
贡献
任何贡献都高度鼓励和欢迎。 :)
在GitHub上Fork。
进行更改。如果更改包括文档和测试,则可获得加分。
发送pull请求。
许可证
更改
1.0.3 (2016-05-15)
Python 3修复。
1.0.2 (2011-10-20)
修复了setup.py在安装时无法看到README.rst时的失败。
1.0.1 (2011-10-10)
修复了setup.py包不包含MANIFEST.in的问题。
1.0 (2011-10-03)
发布了SocialGrapple的解耦代码。
项目详情
关闭
apiclient-1.0.4.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 2569c998191cd1a042beffa3cf7c1119277237b4ba1fa021d20c81fa98fa95e9 |
|
MD5 | 4433cdad604736536b3d56a2dc633ff6 |
|
BLAKE2b-256 | f193d36bc33f0b1cfbb7c2b5e3057586abc500aa49f0c1d8fb32af347319c1ca |