如何以有效的方式在RESTFUL API中进行分页?

时间:2016-08-05 07:19:04

标签: api rest restful-architecture restful-url

我想在我的RESTful API中支持分页。

我的API方法应该通过http://localhost/products/v1/getproductsbycategory返回产品的JSON列表,可能有数千种产品,我想通过它们进行分页,所以我的请求应该是这样的:

public function getProductsByCategory($product_id,$page){
                $perPage=5;
                $start=($page-1)*$perPage;
                $stmt=$this->conn->prepare("SELECT id,product,description,destination_url,expiry_type,savings,expiry,title,last_updated_on  FROM products   WHERE product_id=?   ORDER BY  last_updted_on DESC LIMIT $start ,$perPage");
                $stmt->bind_param('i',$category_id);
                $stmt->execute();
                $productbycategory=$stmt->get_result();
                $stmt->close();
                return $productbycategory;
      }

      }

2 个答案:

答案 0 :(得分:0)

首先,在RESTful调用中,URL理想情况下应该是基于名词而不是动词。我们正在使用HTTP动词(GET,PUT,POST等)对你的名词 - 产品做一个动作。

因此,网址应为http://localhost/products/v1/category

这实际上意味着您正在根据类别获取v1类型的产品。要获取给定的页码,只需将其添加为查询参数 -

http://localhost/products/v1/category?page=1

并在与localhost/products/v1/category

对应的GET实现中相应地处理它

希望这有帮助。

答案 1 :(得分:0)

分页本身与JSON格式无关 - 它全部与URL中的查询字符串以及服务器如何解释它有关。

扩展@Sampada的回答,您可以拥有类似

的网址

http://localhost/products/v1/category?pageSize=5&pageNumber=2

然后您只需在服务器端选择相应的元素(考虑您是否需要基于0或1的pageNumber索引),并返回它们。

此外,您可以将此集合包装在一个对象中,该对象还提供链接以导航到上一个/下一个/特定页面 - 请参阅HATEOAS& Richardson's Maturity Model level 3