编写restful api客户端。

wac的Python项目详细描述


https://secure.travis-ci.org/bninja/wac.png?branch=master

要为restful api编写友好的客户机,您通常会执行 以下内容:

  • 编写用于与服务器通信的http客户端命令。这些命令 执行诸如封送有效负载、转换错误、调用请求挂钩等操作。
  • 将客户端反序列化的响应转换为资源对象(即 将响应对象化)。
  • 建立查询(例如筛选、排序)以访问与某些资源匹配的资源 标准可能按特定顺序排列。

在理想情况下,客户端给用户一些近似ORM的东西。 为了你的资源。本图书馆旨在帮助您编写 客户机提供您正在使用的api符合一些基本的 惯例:

  • 正确使用http。
  • 使用类型和uri信息注释资源表示。

安装

简单:

$ pip install wac

或者如果您愿意:

$ easy_install wac

要求

用法

我们来举个例子。这个例子的代码在example.py中。

  • 首先导入wac:
importwac
  • 接下来定义客户机的版本:
__version__='1.0'
  • 同时定义默认情况下所有Clients将使用的配置:
default_config=wac.Config(None)
  • 现在请友好地定义一个更新配置的函数:
defconfigure(root_url,**kwargs):default=kwargs.pop('default',True)kwargs['client_agent']='example-client/'+__version__if'headers'notinkwargs:kwargs['headers']={}kwargs['headers']['Accept-Type']='application/json'ifdefault:default_config.reset(root_url,**kwargs)else:Client.config=wac.Config(root_url,**kwargs
  • 现在,大的一个,定义您的Client,这是用来与之交谈的 服务器:
classClient(wac.Client):config=default_configdef_serialize(self,data):data=json.dumps(data,default=self._default_serialize)return'application/json',datadef_deserialize(self,response):ifresponse.headers['Content-Type']!='application/json':raiseException("Unsupported content-type '{}'".format(response.headers['Content-Type']))data=json.loads(response.content)returndata
  • 然后定义基Resource
classResource(wac.Resource):client=Client()registry=wac.ResourceRegistry()
  • 最后是你的实际资源:
classPlaylist(Resource):type='playlist'uri_gen=wac.URIGen('/v1/playlists','{playlist}')classSong(Resource):type='song'uri_gen=wac.URIGen('/v1/songs','{song}')
  • 完成!现在你可以做这样疯狂的事情:
importexampleexample.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()))forplaylistinq:song=playlist.songs.create(name='Flutes',length=1234,tags=['nuti','fluti'])song.length+=101song.save()

贡献

  1. 叉开它
  2. 创建您的功能分支(git checkout-b my new feature
  3. 编写代码并测试
  4. 确保所有测试仍然通过(python setup.py test
  5. 提交更改(git commit-am'add some feature'
  6. 推到分支(git push origin my new feature
  7. 创建新的拉取请求

历史记录

0.21(2013-06-18)

  • 需要请求>;=1.2.3。

0.19(2013-05-16)

  • 允许请求版本<;=1.1.0。

0.14(2013-01-29)

  • pin请求版本低于1.0,直到我们用请求测试它>;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)

  • 它还活着!

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

推荐PyPI第三方库


热门话题
java什么会导致程序在它似乎拥有的监视器上被阻止?   java Android studio设置视图的背景色   java我可以保存一个文本文件而不给用户修改它的能力吗?   pdfbox PDFBOX2。0:java堆堆栈错误   java是维护和操作AllowList的有效方法   JAVAsql。SQLException:找不到适合jdbc的驱动程序:mysql://localhost:3306/asd性爱   如何使用java。lang.NullPointerException:void 安卓。支持v7。应用程序。ActionBar。setElevation(float)“”在空对象引用上'   java调试空指针异常   java正则表达式,以按令牌的特定匹配项拆分,同时忽略其他匹配项   java为JPanel设置边框上的笔划   并发@Schedule方法的java行为   如何在Java中使用泛型与语言运算符和泛型类扩展数   java Rhino Javascript如何为异常堆栈跟踪标记字符串源   运行可执行jar时发生java错误,无法找到或加载主类