你们会推荐什么作为在 servicestack 中实现搜索的最佳方式。例如,目前我有一个高级搜索表单,它在后端只是动态地构建了一个 linq 查询。如果我想使用服务堆栈公开搜索功能,那么最好的方法是什么。
我见过一些人使用创建请求属性的想法,例如 [object].FirstnameStartsWith 、 [object].SurnameContains 等
你们会推荐什么作为在 servicestack 中实现搜索的最佳方式。例如,目前我有一个高级搜索表单,它在后端只是动态地构建了一个 linq 查询。如果我想使用服务堆栈公开搜索功能,那么最好的方法是什么。
我见过一些人使用创建请求属性的想法,例如 [object].FirstnameStartsWith 、 [object].SurnameContains 等
我带着这样的东西去了
[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();
}
}
没有best way
为服务设计 API,但您的目标应该是尽可能具有描述性和用户友好性,以便客户可以通过查看请求 DTO 来准确确定服务的功能。
一般来说,服务应该是连贯的并且与使用它们的客户端调用上下文的用例相关,例如,为该请求添加一个新的字段/功能应该有可能对已经使用该服务的现有客户端有用。
搜索和过滤结果集就是一个很好的例子,其中添加的每个字段/功能都在过滤目标结果集。
我在设计服务时的其他顾虑是缓存能力,即我将长期可缓存结果与短期不可缓存信息分开。