4

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

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

4

2 回答 2

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();
     }

}
于 2013-02-18T16:56:55.567 回答
0

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

一般来说,服务应该是连贯的并且与使用它们的客户端调用上下文的用例相关,例如,为该请求添加一个新的字段/功能应该有可能对已经使用该服务的现有客户端有用。

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

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

于 2013-02-18T20:29:24.497 回答