使用urllib3创建良好api客户端库的框架。
apiclient的Python项目详细描述
用于构建goodapi客户端库的小框架 urllib3。
亮点
- threadsafely使用keep alive(通过urllib3)重用连接。
- 小而易于理解的代码库非常适合扩展和构建。
- 内置支持速率限制和请求限制。
- 函数示例 Klout API 以及 Facebook OpenGraph API。
示例
如何创建自己的超级简单客户端API库:
>>> from apiclient import APIClient >>> class AcmePublicAPI(APIClient): ... BASE_URL = 'https://localhost: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上。
- 做些改变。如果更改包括文档和测试,则可获得额外积分。
- 发送拉取请求。
如果你不确定这是不是个好主意, open an Issue或 contact me讨论你的建议。 如果您选择了todo列表中的某些项目,则可以获得额外的丰厚奖励积分。
许可证
更改
1.0.3(2016-05-15)
- python 3修复。
1.0.2(2011-10-20)
- 修复了在使用 易于安装。
1.0.1(2011-10-10)
- 修复了setup.py包不包括manifest.in
1.0(2011-10-03)
- 发布了与SocialGrapple分离的代码。