我正在尝试构建一个 API 端点,该端点将返回分页响应,稍后将用于实现无限滚动功能。 我对回复进行分页是否正确?
到目前为止,我已经编写了以下资源类:
class Restaurants(Resource):
def get(self):
try:
page = int(request.args.get('page', 1))
limit = int(request.args.get('limit', 20))
except:
return abort(409, 'Invalid URL arguments')
paginate = Restaurant.query.paginate(page, limit, False)
obj = {}
obj ['page'] = page
obj['limit'] = limit
next = paginate.next_num
query_string_next = ''
if next:
query_string_next = "restaurants?page=%d&limit=%d" % (next,limit)
obj['next'] = query_string_next
query_string_prev = ''
prev = paginate.prev_num
if prev:
query_string_prev = "restaurants?page=%d&limit=%d" % (prev,limit)
obj['prev'] = query_string_prev
obj['results'] = marshal(paginate.items, resource_fields)
return obj
这很好用,但我的问题是是否优化得很好?
鉴于查询将在每个页面请求上执行,并且每个用户可能对不同页面的同一端点进行多次 API 调用,是否有更好的技术先缓存所有条目,然后使用缓存结果在构建分页响应?
欢迎提出任何其他建议。