我们目前正在研究在我们的 Web API 中使用 OData 查询语法。我们不打算实现完整的 OData 实现 - 只是利用查询语法。
将您的应用程序分成几个层通常被认为是良好的应用程序架构。在现代 Web 应用程序中,这些层将包括数据层和 UI/传输层,它们可以在将存储在数据库中的信息发送给客户时以不同方式对其进行建模。
例如:您可能有一个如下所示的数据库(实体框架)模型:
public class Employee
{
public Guid Id {get; set;}
public string Name {get; set;}
public int AccessLevel {get; set;}
}
但是您的 Web API 可能会以不同的有线格式向您的客户公开这些数据:
public class EmployeeDto
{
public string Name {get; set;}
public string SecurityClearence {get; set;}
}
使用 ASP.NET Web API 和(大概??)Microsoft ASP.NET Web API OData 库我们将如何实现我们的客户将针对 DTO 格式编写查询的场景,例如:
?$filter=(SecurityClearence eq 'TopSecret')
...然后我们会将其转换为我们的数据格式。例如:
?filter=(AccessLevel eq 007)
或其他一些允许我动态查询数据库的格式,例如表达式。例如:
db.Employees.Where(translatedExpression);
我已经想到了几种手动实现这一点的方法,但我很想知道其他人将如何解决这个问题,因为我觉得到目前为止我的实现非常粗糙,不太可能经得起审查。
Web API OData 库(和相关的 EDM 库)是否有可以为我实现部分或全部这些功能的功能?