设计这个库的目的在于简化对声称为“ RESTful ”的 web 服务的访问。在 Wikipedia 上可以找到这种说法的一种合理定义。然而,一种合理的描述是, RESTful 服务应该有代表远程对象的url,以便在这些url上调用方法。
但应该注意,实际上绝大多数服务都不符合这种严格的定义。相反,它们的 RESTful 端点通常有一个API,与它们支持的其他API类型(例如 XML-RPC )相比,此API的用法简单一点。这个库尝试支持的正是此类API。
它由两部分组成:
l 第一部分旨在通过提供一个围绕 libsoup 的包装器,让发出请求变得更简单。
l 第二部分通过包装 libxml2 ,为XML解析提供帮助。
发出请求
当为url创建代理时,您可以给出一个格式字符串。此格式字符串代表一个远程对象的路径类型,然后可以将此格式字符串与特定的对象名称绑定在一起,从而让此代理从抽象变为具体。我们提取出在其对象中进行特定调用所需的参数,然后异步地和伪异步地调用这些参数(通过执行主循环,同时等待答案)。这样做的好处是允许我们支持依赖于参数的复杂行为,例如签署一个请求:一个针对众多 web 服务的要求 。
处理结果
标准XML解析器需要做大量工作才能解析一小段XML。对于SAX解析器,这涉及到预先建立函数,而对于DOM解析器,这意味着要处理DOM树的复杂性。 librest 的XML解析组件的行为被设计得有点像 BeautifulSoup 解析器 ,即将XML解析到一棵容易遍历的树中,在该树中,节点拥有针对其子孙的子节点和针对共享同一个父节点的同类节点的子节点。举例来说,这让从根节点获得文档中所有的“photo”节点变得更容易。
原文链接:http://moblin.org/projects/librest