你们建议什么是在servicestack中实现搜索的最佳方式。例如,目前我有一个高级搜索表单,在后端只是动态地建立一个linq查询。如果我想使用服务堆栈公开搜索功能,那么最好的方法是什么。
我见过一些人使用创建请求属性的想法,如[object] .FirstnameStartsWith,[object] .SurnameContains等
答案 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即可准确确定服务的功能。
通常,服务应该具有内聚性并且与客户调用上下文消费它们的用例相关,例如,为该请求添加新字段/功能应该可能对已经使用该服务的现有客户端有用。
搜索和过滤结果集就是一个很好的例子,其中添加的每个字段/特征都是过滤目标结果集。
我在设计服务时遇到的其他问题是缓存能力,即我将长期可缓存的结果与短期不可缓存的信息分开。