造轮子之统一请求响应格式
在上文中我们实现了统一业务异常处理,在异常响应中我们也使用了统一的响应格式返回给客户端。
接下来我们就讲一下约定统一的氢气响应格式。
在业务开发中,一个规范统一的请求响应格式可以提高我们的前后端开发对接效率,同时清晰的结构提高了可读性。
响应基类
首先定义一个最基础的只提供Code和Message两个属性的基类
public class R
{
public R()
{
}
public R(string code, string message)
{
Code = code;
Message = message;
}
public string Code { get; set; } = "0";
public string Message { get; set; } = "success";
}
我们约定状态码0则是成功,Message成功默认为success。
泛型响应类
业务请求中我们通常需要返回数据,所以一个统一格式泛型的响应类型就很有必要。我们直接继承R类型,添加一个泛型属性。
public class R<TData> : R
{
public R(TData data) : base()
{
Data = data;
}
public TData Data { get; set; }
}
分页泛型响应类和分页请求基类
除了我们普通的数据响应,我们很多情况也需要分页查询响应。那么单独构造一个分页专用泛型的响应类型和分页请求基类就很必要。
public class Page<TData> : R
{
public Page(List<TData> data, long total) : base()
{
Data = data;
Total = total;
}
public List<TData> Data { get; set; }
public long Total { get; set; }
}
同样是继承R基类,添加一个泛型List属性和分页Total属性。
分页请求基类,我们分页请求大部分是固定的请求参数是页码,请求数据量,以及排序。所以我们把这三个属性抽象出来形成基类。后续复杂的分页业务查询即可继承此基类再额外增加查询条件。
public class PageRequest
{
public int PageIndex { get; set; } = 1;
public int PageSize { get; set; } = 10;
public string OrderBy { get; set; } = "Id";
}
到这我们完成了我们基础的请求响应格式的统一。
轮子仓库地址https://github.com/Wheel-Framework/Wheel
欢迎进群催更。