动态rest客户端

restdyn的Python项目详细描述


restdyn是在优秀的restkit库之上构建的动态rest客户机。

它的目标是能够处理任何api的uri。

它是怎么工作的?

假设我们想要获取伟大服务http://www.example.com的json api。他们的api来自http://api.example.com/1.0/

>>> from restdyn import Client
>>> ExampleAPI = Client('http://api.example.com/1.0/')

现在我们要从http://api.example.com/1.0/users/search?q=Timy

>>> results = ExampleAPI.users.search(q='Timy')

就这样!results是一个json对象。

进一步

自动添加参数

有时候有些api有点棘手。以前,api的版本是资源的一部分,但是如果我们必须为每个请求指定它,该怎么办:

http://api.example.com/user/search?v=1.0&q=Timy

我们可以指定一个或多个参数,这些参数将自动添加到查询中:

>>> ExampleAPI = Client('http://api.example.com')
>>> ExampleAPI.set_persistent_params(v="1.0")

或者你可以传一个指令:

>>> ExampleAPI.set_persistent_params({'v':'1.0'})

自定义资源

一些api,比如twitter,在资源之后、查询之前添加.jsonhttps://api.twitter.com/1/search.json&q=Timy。我们可以这样做:

>>> TwitterAPI = Client('https://api.twitter.com/1', end_resource='.json')
>>> results = TwitterAPI.search(q='Timy')

后处理结果

有时你可能要在把结果送回去之前把它清理干净。您可以通过重载client.post_process_result方法来实现。

示例:

Google’s web service won’t send an http error 400 if the request failed. Instead, it will send a custom result:

http://ajax.googleapis.com/ajax/services/search/web?q=Earth%20Day

将发送回来:

{"responseData": null, "responseDetails": "invalid version", "responseStatus": 400}

假设我们希望捕获错误并引发一个requestFailed异常,该异常带有一条自定义消息,该消息位于“responseDetails”字段中:

class CustomGoogleAPI(Client):
    def post_process_result(self, result):
        if result["responseStatus"] == 400:
            raise RequestFailed(result['responseDetails'])
        return result

就这样!不要忘记在post_process_result方法结束时返回结果。

>>> GoogleAPI = CustomGoogleAPI('http://ajax.googleapis.com/ajax/services')
>>> GoogleAPI.search.web(q="toto")
Traceback (most recent call last):
...
RequestFailed: invalid version

添加尾随斜杠

如果正在处理的api的所有url中都有斜线,则可以配置restdyn来添加它:

>>> example_api = Client('http://api.example.com', add_trailing_slash=True)

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

推荐PyPI第三方库


热门话题
jframe为什么JAVA paint()方法不起作用?   java Guice:将ContainerRequestContext注入拦截器   java如何优雅地关闭Spring JMS MessageListenerAdapter   java如何在Spring中设置快照隔离级别   Java中的安卓平台独立信任存储路径   java无法在eclipse中运行hello world程序   java Sinch空指针问题   使用Java将JSON流式传输到BigQuery   java从“大数据”中选择什么Swing控件?   java通过对象字段过滤/排序集合?   java将数据从活动传递到另一个活动中的片段   java访问打包在jar文件中的文档   Java获取事件的大小。getDragboard()。getFiles()。流()。映射(文件::长度)。toString());   java Android libgdx:启动程序图标按下后,启动屏幕不会立即显示   java如何在Google App Engine灵活环境中配置oracle jdk   java有没有办法减少这些行?   Java:客户端socket不读取第二行,在终止符行之后保持打开状态   java以编程方式获取api 29上的所有APK文件   java ActionBar按钮不显示