构建Rest API请求/响应模型的最佳实践

时间:2017-10-24 22:08:02

标签: c# rest oop architecture

我需要有关构建一个宁静的API项目的请求 - 响应模型的最佳方法的建议。

我有所有API响应的基类:

public class BaseResponse
{
    public string Id { get; set; }
    public string Name { get; set; }
}

如果我使用以下方法仅返回客户IdName,并且暂时,则客户无需返回其他字段...

[HttpGet]
[Route("Customer")]
public Task<IActionResult> GetCustomers()
{
    var result = _customerManager.GetCustomers(ModelState);
    return ReturnResponse(result, ModelState);
}

...然后我的问题是:以下哪项是GetCustomers方法和Manager类的更好实现?

1 - 使用BaseResponse directy返回我的数据:

public List<BaseResponse> GetCustomers(ModelStateDictionary modelState)
{
    return new List<BaseResponse>().Add(
        new BaseResponse { id = "1", Name = "Mike" },
        new BaseResponse { id = "2", Name = "Tom" }
    );
}

2 - 为CustomerResponseModel创建一个新类,如下所示,并使用它来返回我的数据 - 首先将其保持为空 - 以考虑我不知道的新字段但是可能会在将来添加。

public class CustomerResponseModel : BaseResponse
{

}

public List<CustomerResponseModel> GetCustomers(ModelStateDictionary modelState)
{  
    return new List<CustomerResponseModel>().Add(
        new CustomerResponseModel { id = "1", Name = "Mike" },
        new CustomerResponseModel { id = "2", Name = "Tom" }
    );
}

我知道这两种方法都没有内存或性能缺陷,但我需要知道这种情况的最佳实践。

第二种方法只有一个已知的缺点:如果我将它应用于同一案例中使用的所有项目实体,它将影响服务器端的项目大小,这是非常常见的,因为会有太多的空类在我的项目中,只从BaseResponse继承。

从设计和结构的角度来看,我需要您对我项目的最佳方法提出建议,并想知道是否存在任何其他缺点。

1 个答案:

答案 0 :(得分:1)

在这种情况下,我总是想到YAGNI(&#34;你Aren需要它&#34;)和KISS(&#34;保持简单,小&#34;)原则。因此,如果您不知道将来是否有必要,请不要这样做。它降低了程序的复杂性并提高了可维护性。

可维护性,因为当我使用你的类并看到返回类型是&#34; BaseResponse&#34;时,我知道响应是一个简单的数据传输对象,总是具有相同的字段。所以我不必探索每个继承的类。