首页 文章

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

提问于
浏览
0

我想在我的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

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

    所以,URL应为http://localhost/products/v1/category

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

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

    并在对应于 localhost/products/v1/category 的GET实现中相应地处理它

    希望这可以帮助 .

  • 0

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

    扩展@Sampada的答案,你可以有一个像这样的URL

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

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

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

相关问题