编写restful api客户端。
mawac的Python项目详细描述
要为restful api编写友好的客户机,您通常会执行 以下内容:
- 编写用于与服务器通信的http客户端命令。这些命令 执行诸如封送有效负载、转换错误、调用请求挂钩等操作。
- 将客户端反序列化的响应转换为资源对象(即 将响应对象化)。
- 建立查询(例如筛选、排序)以访问与某些资源匹配的资源 标准可能按特定顺序排列。
在理想情况下,客户端给用户一些近似ORM的东西。 为了你的资源。本图书馆旨在帮助您编写 客户机提供您正在使用的api符合一些基本的 期望值:
- 正确使用http。
- 使用uri标识资源。
- 一致地命名嵌套资源。
安装
简单:
$ pip install wac
或者如果您愿意:
$ easy_install wac
用法
我们来举个例子。这个例子的代码在example.py中。
首先导入wac:
import wac
接下来定义客户端的版本:
__version__ = '1.0'
同时定义默认情况下所有Clients将使用的配置:
default_config = wac.Config(None)
现在请友好地定义一个更新配置的函数:
def configure(root_url, **kwargs): default = kwargs.pop('default', True) kwargs['client_agent'] = 'example-client/' + __version__ if 'headers' not in kwargs: kwargs['headers'] = {} kwargs['headers']['Accept-Type'] = 'application/json' if default: default_config.reset(root_url, **kwargs) else: Client.config = wac.Config(root_url, **kwargs
现在,大的一个,定义您的Client,这是用来与之交谈的 服务器:
class Client(wac.Client): config = default_config def _serialize(self, data): data = json.dumps(data, default=self._default_serialize) return 'application/json', data def _deserialize(self, response): if response.headers['Content-Type'] != 'application/json': raise Exception("Unsupported content-type '{}'" .format(response.headers['Content-Type'])) data = json.loads(response.content) return data
然后定义基Resource:
class Resource(wac.Resource): client = Client() registry = wac.ResourceRegistry()
最后是你的实际资源:
class Playlist(Resource): uri_spec = wac.URISpec('playlists', 'guid', root='/v1') class Song(Resource): uri_spec = wac.URISpec('songs', 'guid')
完成!现在你可以做这样疯狂的事情:
import example example.configure('https://api.example.com', auth=('user', 'passwd')) q = (example.Playlist.query() .filter(Playlist.f.tags.contains('nuti')) .filter(~Playlist.f.tags.contains('sober')) .sort(Playlist.f.created_at.desc())) for playlist in q: song = playlist.songs.create( name='Flutes', length=1234, tags=['nuti', 'fluti']) song.length += 101 song.save()
贡献
- 叉开它
- 创建您的功能分支(git checkout-b my new feature)
- 编写代码并测试
- 确保所有测试仍然通过(nosetests-svx tests)
- 提交更改(git commit-am'add some feature')
- 推到分支(git push origin my new feature)
- 创建新的拉取请求
历史记录
0.14(2013-01-29)
- pin请求版本低于1.0,直到我们使用requests>;1.0对其进行测试为止
0.12(2012-10-02)
- 修复resourcecolection.filter。
- 添加like和ilike过滤器。
- 次要的PEP8/格式更改。
0.11(2012-09-11)
- 修复配置副本。
0.10(2012-07-27)
- Python2.6兼容性。
0.9(2012-07-25)
- 保存序列化修复程序。
0.8(2012-07-25)
- 分页修复。
0.7(2012-07-20)
- 其他修复。
0.3(2012-05-28)
- 希望你喜欢。
0.2(2012-05-01)
- 成长的痛苦。
0.1(2012-04-01)
- 它还活着!