设计Web API控制器



在现有的LOB应用程序中,我添加了新的Web API项目。由于应用程序中现有的层(域对象、DAL-ADO.NET-数据读取器、BLL),我决定通过保持现有的逻辑来使用Web API。

第一个问题:这是正确的方法吗?

BLL中有一个方法,它返回对象列表,并接收4个参数。所有这些输入参数都可以为NULL,在这种情况下,该方法返回完整的对象列表。

第二个问题:如何为上述方法设计WEB api控制器?

public static List<DomainObject> GetTata(int? param1,int? param2, int? param3, int? param4)
{
List<DomainObject> return = new List<DomainObject>();
using (Context context = new Context())
{
return = MyDAL.GetData(param1,param2,param3,param4, context);
}
return return ;
}

不知道Data是什么意思,但在设计WebApi时,你应该考虑"资源"(而不是"操作")。

我不喜欢这个方法是静态的(老实说,我从来没有测试过它,我不知道它是否有效),但提供响应的方法应该是实例方法(迟早你可能需要访问一些实例字段)。

不知道这四个参数是什么,但你应该考虑访问这个控制器的URL。让我们假设这个控制器返回类似"客户"的内容。所以我认为URL是这样的:

/api/Customers -> Get ALL customers
/api/Customers/{id} -> Get Customer of this id

额外的过滤器和子句(排序依据,如果需要的话分页)通常通过querystring传递(例如,看看OData是如何做到这一点的)。类似于:

/api/Customers?name=foo -> Get ALL customers which its name starts with foo
/api/Customers?name=x&order=birthDate -> Get ALL customers which its name starts with x and ordered by birhDate.

因此,您的控制器应该在URL参数(路由和查询字符串)之间转换为DAL类所期望的参数。但是,在大多数情况下,向WebApi公开DAL类期望的相同参数并不是一个好主意。

希望这能帮助。。。有关更多信息,您应该提供更多信息(参数的含义等)。)

最新更新