使用 RESTful 应用程序请求所有记录的模式是什么?



我想知道我在请求所有记录时的最佳方法是什么。

例如,如果没有提供$top值以避免过载,则我将响应限制为10。但是,如何格式化我的请求?哪个更好,$top=allrows$top=all?我应该检查任何模式吗?

如果没有提供$top值,我只返回10行。

GET /products?$top=

我只想避免这种情况:

GET /products/all

没有官方模式,任何选择都取决于数据的大小。

无论您做什么,始终将最大限制放在您将返回的项目数量中,无论客户端在请求中提供的参数如何。

另外,创建默认计数在参数未提供信息时返回。

如果您没有大量的项目要返回,则计数默认计数最大限制,足以始终返回全部只需在没有任何特定计数的详细信息的情况下将URL返回。

GET /products   (no count/provided)

如果您有数百或数千个,并且有100的默认计数,也许使用明确的 count来扩展该限制(当然是最大的限制 - 如果要求计数>max,返回一个400不良请求,带有消息表明计数不能高于最大)

 GET /products?count=1000000

但是,如果您不断提高最大限制,这对您的服务器和/或客户端可能会很恐怖。

通常,如果您有很多记录,则将其构成零件,并使用计数和偏移将其拉下字节大小的块。还将元数据添加到响应对象中,让请求者知道当前位置,总记录和偏移

一个小伪代码:

$count = 1000
$offset = 0
While count*offset < total records:
    GET /products?count=$count&offset=$offset
    $offset = $offset + $count

假设其中一个请求看起来像:

 GET /products?count=1000&offset=1000 

然后,在响应主体中,您期望的是:

{
   "result": [
         {
           "id": "123",
           "name": "some product",
           "link": "/product/123"
         },
         ... many more products ...
         {
           "id": "465",
           "name": "another product",
           "link": "/product/465"
          }
    ],
    "meta": {
         "count": 1000,
         "offset": 1000,
         "total_count": 3000,
         "next_link": "/products?count=1000&offset=2000",
         "prev_link": "/products?count=1000&offset=0",
     },
     "status": 200
}

如果您真的想要金星,则可以使您的资源遵守Hateos(https://en.wikipedia.org/wiki/hateoas),并在列表中包含指向单个资源的链接,也许在元中有链接到如果您要走大量物品,则列表中的下一个也是以前的块。我在上面的JSON示例中放了一些示例链接。

我会这样这样做:

所有产品获取/产品

对于某些产品get/products/{id}

对于所有具有过滤或排序的产品,使用获取/产品,但让客户在请求主体中向您发送过滤对象。它可以指定他是否想要分页上的某些页面,或过滤一些记录等。

过滤对象看起来像:{" pagenumber":1," pageize":12," freetext":","条件":[]," saterings":{}}}在您的服务中,它将其映射到内部服务过滤器并返回请求的记录。

相关内容

  • 没有找到相关文章

最新更新