使用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。
  • 更多的例子。

贡献

任何贡献都是高度鼓励和期望的。:)

  1. 叉在Github上。
  2. 做些改变。如果更改包括文档和测试,则可获得额外积分。
  3. 发送拉取请求。

如果你不确定这是不是个好主意, open an Issuecontact me讨论你的建议。 如果您选择了todo列表中的某些项目,则可以获得额外的丰厚奖励积分。

许可证

MIT

更改

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分离的代码。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java动态地将圆添加到Arraylist   什么是好的“错误检查”模式(Java)?   java是我们可以在应用程序中使用的云服务,它需要存储最大大小为5MB的小文件   JavaGooglePhotosAPI是静态内容上传项目的永久url   java AES密钥存储   java文件正在下载,但没有任何内容   每次循环迭代和threadsleep的java日志记录都是不好的做法?   java不会切换到另一个。单击submit时使用jsp。春季mvc   java我很难从我的maclaurin系列中获得sin x的准确输出   java使用类似的<Object>?   需要java Hibernate映射吗?   java如何在https和客户端证书请求后面生成web服务代理   java如何通过注释有条件地使用自定义JsonSerializer   java如何在html页面和Restful WebResource方法之间实现JaxB?   读取文件Libgdx Android时发生java错误   java如何在处理主活动之前从另一个方法中获取值?   java在一个SQLquery中使用多个语句,还是使用批处理?