我正在开发一个应用程序,该应用程序必须使用多个外部API来获取信息,并且在处理数据之后,将结果输出到客户端。客户端使用web接口进行查询,一旦查询发送到服务器,服务器进程将请求发送给不同的API提供程序,并在加入这些API的响应后将响应返回给客户端。
所有响应都是JSON.
现行办法:
import requests
def get_results(city, country, query, type, position):
#get list of apis with authentication code for this query
apis = get_list_of_apis(type, position)
results = [ ]
for api in apis:
result = requests.get(api)
#parse json
#combine result in uniform format to display
return results服务器使用Django生成响应。
这种方法的问题
(i)这可能会产生大量的数据,即使客户对所有数据都不感兴趣。
(ii)必须根据不同的API规范解析JSON响应。
如何有效地做到这一点?
注意:正在执行查询以提供职务列表.
发布于 2016-01-27 07:44:51
大多数这种性质的API允许某种类型的“分页”。您应该对请求进行编码,使其只从每个提供程序中绘制一个页面。然后,您可以在本地将几个页面合并为一个流。
如果我们假设您有3个提供程序,并且页面大小固定在10,您将得到30个响应。假设您只向客户端显示10个列表,则必须丢弃并重新查询20个列表。一个更好的方法可能是在本地缓存查询结果很短的时间(比如15分钟到一个小时),这样您就不必每次用户在综合列表中前进一个页面时都请求上游提供者。
就不同提供者所需的不同解析而言,您必须在内部处理这个问题。为每个类创建不同的类。提供程序的列表是固定的,并且很小,因此您可以对哪个提供程序-url获取哪个类行为的表进行编码。
发布于 2017-01-25 18:42:23
无耻的插件,但我写了一篇文章,我是如何做到这一点的杜兰戈REST框架这里。
我强烈建议使用Django REST框架,它使一切变得更加简单。
基本上,API端的模型非常简单,只包含关于使用了什么外部API和该API资源的ID的信息。然后,GenericProvider类提供一个抽象接口来对外部源执行CRUD操作。此GenericProvider使用您创建的其他提供程序,并通过模型上的provider字段确定要使用的提供程序。然后,GenericProvider返回的所有数据都会像往常一样序列化。
希望这能有所帮助!
https://stackoverflow.com/questions/35029841
复制相似问题