ABP开发框架前后端开发系列---(10)Web API调用类的简化处理
在较早期的随笔《ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用》已经介绍了Web API调用类的封装处理,虽然这些调用类我们可以使用代码生成工具快速生成,不过自定义接口,还是需要我们对这些接口进行实现,以便发起对Web API的调用,并获得相应的数据返回。本篇随笔介绍使用API调用类的封装类,进行函数的抽象,根据方法名称的推断,构建URL或者WebClient的请求类型,从而实现所有API调用函数的简化处理。
1、ABP框架服务端和客户端的处理
ABP框架的架构图示,如下图所示(以字典模块为例说明)
针对Web API接口调用的封装,为了适应客户端快速调用的目的,这个封装作为一个独立的封装层,以方便各个模块之间进行共同调用。
而ABP的Web API调用类则需要对Web API接口调用进行封装,如下所示。
如对于字典模块的API封装类,它们继承一个相同的基类,然后实现特殊的自定义接口即可,这样可以减少常规的Create、Get、GetAll、Update、Delete等操作的代码,这些全部由调用基类进行处理,而只需要实现自定义的接口调用即可。
2、Web API调用类的简化处理
我们对于常规的Web API调用接口处理,如下代码所示。
复制代码
public async virtual Task Authenticate(string username, string password)
{
var url = string.Format("{0}/api/TokenAuth/Authenticate", ServerRootAddress);
var input = new
{
UsernameOrEmailAddress = username,
Password = password
};
var result = await apiClient.PostAsync(url, input);
return result;
}
复制代码
这种方法的处理,就需要自己拼接URL地址,以及传递相关的参数,一般情况下,我们的Web API Caller层类的函数和Web API控制器的方法是一一对应的,因此方法名称可以通过对当前接口名称的推断进行获得,如下所示。
复制代码
public async Task ChangePassword(ChangePasswordDto input)
{
AddRequestHeaders();//加入认证的token头信息
string url = GetActionUrl(MethodBase.GetCurrentMethod());//获取访问API的地址(未包含参数)
return await apiClient.PostAsync(url, input);
}
复制代码
函数AddRequestHeaders 通过在调用前增加对应的AccessToken信息,然后URL通过当前方法的推断即可构建一个完整的URL,但是这个也仅仅是针对POST的方法,因为ABP框架根据方法的名称前缀的不同,而采用POST、GET、Delete、PUT等不同的HTTP处理操作。
如GET方法,则是需要使用GET请求
复制代码
public async Task
- > GetRolesByUser(EntityDto
- >(url);
return result;
}
复制代码
而对于删除方法,则使用下面的DELETE请求,DELETE 和PUT操作,需要把参数串联成GET的URL形式,类似 url += string.Format("?Id={0}", id); 这样方式
复制代码
public virtual async Task Delete(TDeleteInput input)
{
AddRequestHeaders();//加入认证的token头信息
string url = GetActionUrl(MethodBase.GetCurrentMethod());//获取访问API的地址(未包含参数)
url += GetUrlParam(input, url);
var result = await apiClient.DeleteAsync(url);
return result;
}
复制代码
对于更新的操作,使用了PUT方法
复制代码
public async virtual Task