Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RESTful API设计:检索类别中的项目数_Rest_Api - Fatal编程技术网

RESTful API设计:检索类别中的项目数

RESTful API设计:检索类别中的项目数,rest,api,Rest,Api,我想创建一个RESTAPI,其中包含类别中的项目,并列出所有类别及其项目数 模式: Category {id, name} Item {id, name, categoryId} GET /categories/list GET /categories/<id> PUT /categories/<id> GET /items/list[?category=<categoryId>] GET /items/<id>

我想创建一个RESTAPI,其中包含类别中的项目,并列出所有类别及其项目数

模式:

Category {id, name}
Item {id, name, categoryId}
GET    /categories/list
GET    /categories/<id>
PUT    /categories/<id>

GET    /items/list[?category=<categoryId>]
GET    /items/<id>
端点:

Category {id, name}
Item {id, name, categoryId}
GET    /categories/list
GET    /categories/<id>
PUT    /categories/<id>

GET    /items/list[?category=<categoryId>]
GET    /items/<id>
GET/categories/list
获取/分类/
放置/分类/
获取/项目/列表[?类别=]
获取/获取项目/
要更新一个类别,我需要从
get/categories/
中获取的内容,修改JSON对象并
将其放回原处

到目前为止还不错

我的问题是,是否有一个或多个最佳实践来检索项目计数? 我可以想出一些方法来做到这一点:

  • 为每个类别触发一个
    GET/items/list?category=
    ,计算结果项。
    从端点返回的
    X-total-count
    内容范围
    标题或
    total\u count
    字段中获取计数将避免实际加载所有项目
  • item\u count
    字段添加到生成的类别JSON对象中。
    对于
    PUT
    s,应如何处理此只读字段?让后端忽略它?手动取消设置它
  • 创建一个专用端点
    /categories/item_counts
    ,该端点返回每个项目数的类别列表

  • 我喜欢选项2(例如),因为它不需要额外的请求。但是我真的不喜欢为
    GET
    PUT
    请求使用不同的对象结构。

    REST实际上是关于对象的表示<代码>类别
    没有计数,因为它是单个对象<代码>项也没有计数,原因相同。Count更像是RPC,在这里您告诉服务计算一些东西

    GET /items/list[?category=<categoryId>]
    
    虽然我会使用路径参数来代替:

    GET /items/list/<category_id>/count
    
    它有点偏离了“纯”REST,但它保持了实际REST对象的干净,正如您所说,保持了
    total\u count
    我们的
    类别
    对象

    我假设您有时需要计数,但不是所有的
    s,否则您不需要向API请求计数,您只需要在客户机中自己计数即可。这意味着另一种选择:

    GET /categories/<id>/count
    {
      "total_count": 10
    }
    
    GET/categories//count
    {
    “总计数”:10
    }
    
    哪一个更适合于找出一个
    类别中有多少
    项的用例