我目前正在使用PHP设计和实现RESTful API。 该API允许用户搜索酒店。如何在REST API搜索查询中返回过滤元数据
搜索请求的一个简化的例子是:
GET hotels/searchresults?location=<location> #collection of hotels within location
响应还包含有关返回的集合一些元信息。 响应的基本结构是:
“meta": {
“totalNrOfHotels": 100,
"totalNrAvailable": 80
},
“hotels": [
{
“id": 123,
“name": "Hotel A"
},
{
“id": 135,
“name": "Hotel B"
},
...
]
该资源还支持分页:
GET hotels/searchresults?location=<location>&offset=0&limit=20
现在,有可被应用于搜索结果的一些过滤器,例如星星,评分。 例如,如果我想只是2家星级酒店,我可以查询:现在
GET hotels/searchresults?location=<location>&offset=0&limit=20&stars=2
,在用户界面中的过滤,通常显示的每个过滤器设置可选项的数量:
在我看来,这些数字可以看作是有关搜索查询的元数据。所以,我们可以在响应一个额外的字段添加到元:
“meta": {
“totalNrOfHotels": 100,
"totalNrAvailable": 80
“filterNrs": {
"stars”: {
“1": 1,
“2”: 9,
“3”: 39,
“4”: 12,
“5”: 11,
“none”: 9
}
}
},
“hotels": [
{“id": 123,
“name": "Hotel A"
},
{“id": 135,
“name": "Hotel B"
},
...
]
所以,我有两个问题:
应该提出这个“filterNrs”属性静坐在元部分,以上?对我来说,将它作为一个单独的资源/请求是没有意义的
我们该如何处理这样会降低查询速度的事实?我宁愿使“filterNrs”字段可选。我们正在考虑使用“metaFields”参数来允许用户指定她想要接收的元数据中的哪些字段。我们已经为返回的酒店支持这个参数,并带有“fields”参数(类似于:https://developers.google.com/youtube/2.0/developers_guide_protocol_partial)。或者,我们把这个字段filterNrs(或完整的元信息)放在一个单独的资源中,比如
hotels/searchresults/meta
。从开发人员的角度来看,你更喜欢将这个分割成多个资源,或者让一个资源具有显示全部或部分元信息?