servicestack请求实现搜索的最佳方法

时间:2013-02-17 00:35:42

标签: servicestack

你们建议什么是在servicestack中实现搜索的最佳方式。例如,目前我有一个高级搜索表单,在后端只是动态地建立一个linq查询。如果我想使用服务堆栈公开搜索功能,那么最好的方法是什么。

我见过一些人使用创建请求属性的想法,如[object] .FirstnameStartsWith,[object] .SurnameContains等

2 个答案:

答案 0 :(得分:1)

我选择了这样的东西

[Route("/things", "GET")]
public class ThingList
{
    public string Term { get; set; }
    public int Take { get; set; }
    public int Skip { get; set; }
}

public partial class ThingService : Service
{
     public object Get(ThingList req)
     {
         var query = this.Things // from somewhere

         if(!string.IsNullOrEmpty(req.Term))
             query = query.Where(x => x.Name.Contains(req.Term));

         if(req.Skip > 0) query = query.Skip(req.Skip);
         if(req.Take > 0) query = query.Take(req.Take);

         return query.ToList();
     }

}

答案 1 :(得分:0)

没有best way为服务设计API,但您的目标应该是尽可能具有描述性和用户友好性,以便客户只需查看请求DTO即可准确确定服务的功能。

通常,服务应该具有内聚性并且与客户调用上下文消费它们的用例相关,例如,为该请求添加新字段/功能应该可能对已经使用该服务的现有客户端有用。

搜索和过滤结果集就是一个很好的例子,其中添加的每个字段/特征都是过滤目标结果集。

我在设计服务时遇到的其他问题是缓存能力,即我将长期可缓存的结果与短期不可缓存的信息分开。