2014-02-24 48 views
0

在现有的LOB应用程序中,我添加了新的Web API项目。由于应用程序(域对象,DAL-ADO.NET-DataReader,BLL)中的现有图层,我决定通过保留现有逻辑来使用Web API。设计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 ; 
} 

回答

1

不知道是什么数据手段,但设计的WebAPI时,你应该考虑在“资源”(而不是“动作”的思想)。

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

不知道这四个参数是什么,但您应该考虑访问此控制器的URL。让我们假设这个控制器返回类似“Customers”的东西。所以我觉得URL是这样的:

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

附加过滤器和clausules(ORDER BY,如果需要的话分页)通常是通过查询字符串传递(即采取怎样的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类所需的参数。但是,大多数时候将DAL类期望的相同参数暴露给WebApi并不是一个好主意。

希望这有助于...更多信息,你应该提供一些更多的信息(什么参数意味着,等等)。 ;)