ABP源码分析三十七:ABP.Web.Api Script Proxy API
ABP提供Script Proxy WebApi为所有的Dynamic WebApi生成访问这些WebApi的JQuery代理,AngularJs代理以及TypeScriptor代理。这些个代理就是javascript脚本,通过这些代理可以简单的访问Dynamic webApi。
如下实例演示一个最基本的应用场景。首先通过Script Proxy WebApi获取所有Dynamic WebApi的angular 代理。
假设你有一个ApplicationService如下,并且你为该ApplicationService创建了动态的WebApi
那么在ABP框架下,你可以使用如下简单的Js完成WebApi的调用。
PlainTextFormatter:自定义的针对"text/plain"的媒体格式化器。服务器端通过WebApi返回给客户端的Javascript脚本时所使用的媒体格式化器。
IScriptProxyGenerator:定义了一个generate方法用于生成访问Dynamic WebApi的代理,所谓代理就是一段js代码。
JQueryProxyGenerator:根据DynamicApiControllerInfo生成访问Dynamic WebApi方法的JQuery代理。
JQueryActionScriptGenerator:根据DynamicApiControllerInfo,DynamicApiActionInfo生成访问这个Dynamic WebApi 的特定Action方法的JQuery代理。
AngularProxyGenerator:根据DynamicApiControllerInfo生成访问Dynamic WebApi方法的AngularJs代理。
AngularActionScriptWriter:根据DynamicApiControllerInfo,DynamicApiActionInfo生成访问这个Dynamic WebApi 的特定Action方法的AngularJs代理。
TypeScriptController: 这个API为系统中所有的DynamicApiControllerInfo生成TypeScriptor代理。返回给客户端的结果 是一段TypeScriptor脚本。由于TypeScriptor无法在浏览器中直接运行。所以作者此处的用意实在不明白。 个人猜测这些TypeScriptor脚本是为更近一步开发所准备的。
AbpServiceProxiesController:这个就是向外提供JQuery代理,AngularJs代理脚本的webAPI了。其有两个方法:get方法根据具体的某个controllerName返回该controller的代理。 getALL则返回所有DynamicAPI的代理。
ScriptProxyManager:单例对象,封装了一个字典对象IDictionary<string, ScriptInfo> CachedScripts用于缓存生成的JQuery代理,AngularJs代理脚本。AbpServiceProxiesController通过调用ScriptProxyManager的方法生成代理脚本。