【问题标题】:Restful GET URLs for Queries, When there are multiple queries need to serveRestful GET URLs for Queries,当有多个查询需要服务时
【发布时间】:2016-12-22 23:19:08
【问题描述】:

我在 Mongo DB for Users 中有类似的结构。

{ 
     "id": 112121
     "name": "Strange",
     "age": 27,
     "type": "Manager"
     "email" : "strage@gamil.com",
     "items" : [
         {
            "id": "1001",
            "name": "laptop",
            "details": [
                {
                  "attributeKey": "ManifaturedYear",
                  "attributeValue" : "2010"
                },
                {
                  "attributeKey": "EligibaleToDsipose",
                  "attributeValue" : "2018"
                }
             ]
         },
         {
            "id": "1002",
            "name": "phone",
            "details": [
                {
                  "attributeKey": "ManifaturedYear",
                  "attributeValue" : "2010"
                },
                {
                  "attributeKey": "EligibaleToDsipose",
                  "attributeValue" : "2018"
                }
             ]
         }  


      ]
}

我提供了一个安静的 URI 来操作这个资源。并有如下网址

创建

 POST api/users
 POST api/users/{id}/items e.g. api/user/12121/items
 POST api/users/{id}/items/{id}/details e.g. api/user/23223/items/222/details

更新 |删除

 [ PUT | DELETE ] api/users/{id}
 [ PUT | DELETE ] api/users/{id}/items/{id}
 [ PUT | DELETE ] api/users/{id}/items/{id}/details/{attributeKey}

我的问题是我如何支持获取请求

  1. 获取经理拥有的项目? A、B 或 C

A.获取 api/users/type/{type}/items 例如获取 api/users/type/Manager/items

B.获取 api/users/{type}/items 例如GET api/users/Manager/items # 与 id 冲突

C. GET api/users/items?type=Manager

  1. 如何使用电子邮件地址 abc@gmail.com 获取用户的项目

A.获取 api/users/email/abc@gamil.com/items

B. GET api/users/items?userEmail=abc@gmail.com

  1. 如何获取30岁以上用户的物品?

我在设计其余 URI 时可以参考的任何好的参考

【问题讨论】:

    标签: mongodb rest restful-url


    【解决方案1】:

    如果可能的话,我的建议是将项目分解为顶级资源。 /users/{id} 仍将拥有该用户拥有的项目集合。根据您的需要,您可能只将它们作为链接而不是完整的表示形式嵌入到用户响应中。 /items 将是所有项目的规范集合。这将为您提供以下资源:

    /users
    /users/{id}
    /users/{id}/items
    
    /items
    

    如果你这样做,那么:

    1:GET /items?ownerType=Manager

    2:GET /items?ownerEmail=abc@example.com(项目集合)-或-GET /users?email=abc@example.com(一个用户的集合)

    3:GET /items?ownerOlderThan=30

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多