查询的Restful GET URL,当需要提供多个查询时

时间:2016-12-22 02:17:38

标签: mongodb rest restful-url

我在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来操纵这个资源。并且URLS如下

CREATE

 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

更新| DELETE

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

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

  1. 获取Managers拥有的物品? A,B或C
  2.   

    一个。 GET api / users / type / {type} / items例如GET api / users / type / Manager / items

         

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

         

    ℃。获取api / users / items?type = Manager

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

      一个。获取api/users/email/abc@gamil.com/items

           

      B中。获取api/users/items?userEmail=abc@gmail.com

      1. 如何获取30岁以上用户的项目?
      2. 我可以采用任何好的参考来设计我的其余URI

1 个答案:

答案 0 :(得分: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