使用ServiceStack,我正在寻找通过以类似于 OData 的方式组合 URL 来访问相关服务的方法。
OData示例将是一个 URL,如
http://localhost:8080/owind.svc/Categories(2)/Products
这将找到与类别 2 相关的所有产品。
ServiceStack 的一个等效示例似乎是您将为 ProductService 创建一个 Request DTO 并设置如下所示的 Routes:
[Route("/Products")]
[Route("/Products/{Id}")]
[Route("/Categories/{Category}/Products")]
public class Products
{
public string Id { get; set; }
public string Category { get; set; }
}
(忽略此处提到的关注点分离问题,上述属性至少可以清楚地说明我在问什么。)
然后在 ProductService 中,您将支持通过主键或外键查找产品。我在 ServiceStack.Northwind.ServiceModel 示例项目的 Northwind.ServiceModel.Operations.Orders 类中看到了一些类似的东西。
所以我想知道,这是在 ServiceStack 中做这类事情的最好和最具可扩展性的方式,还是我缺少一些捷径?考虑创建支持数百个表的服务的规模,如果存在某种捷径,并且如果它没有附带字符串,它可能会有所帮助。
我可以想象一个系统,您可以根据 DTO 中的任何内容自动生成路由,尽管您需要从 DTO 属性名称(通常是单数)到路由(通常是复数)进行一些映射。
不知道是否可以想象将其超越一个级别......例如
.../Employee/1/Orders/Customers
这将使您获得与员工 #1 有订单的每个客户。大规模手动实现这一点的想法似乎令人望而却步。不确定是否有支持或反对 SOA 的论据,但也很高兴知道这一点。
为了清楚起见,不应该假设底层数据存储或访问库。