1 在我们的基于REST API进行开发的应用系统中,经常会遇到需要清除REST cache的情况,例如服务发生变化或者新增、删除服务的时候。这些情况下在ArcGIS10 之前的版本时,只能够手工的去清除REST Cache。
2 在ArcGIS 10中,REST API新增加了清除REST cache的方法,具体流程是:首先使用generateToken 方法生成toeken,然后使用token调用cache/clear方法去清除缓存。
2.1 generateToken方法的Url为:
其中admin-url为http:// / /admin,例如 http://zbc/arcgis/rest/admin
在调用这个方法的时候,需要使用POST方法,其中POST的参数主要有:
参数
细节
f
响应返回的格式,默认返回html
值为:html或json
username
REST 管理员的用户名
Password
REST 管理员的密码
client
生成token使用的IP地址或者HTTP Referer
值为ip,requestip或referer
当值为ip时,ip参数必须填写
当值为referer, referer参数必须填写
当值为requestip时,ip和referer参数不必填写,系统会使用当前发送HTTP请求的ip地址来生成token,一般来说使用该选项,除非生成token和清除cache不是由同一个ip或referer的程序完成。
referer
client=referer时候有效,需要输入调用REST Admin 的基础网址,例如:referer=http://myserver/mywebapp
ip
client=ip时有效,需要输入调用REST Admin 的ip,例如ip=10.14.102.85
expiration
Token超时时间,单位为分钟,默认为60分钟,token有效期最长为一年(525600分钟)。
例如expiration=43200 (1 month)
该方法的返回结果为(JSON):
{
“token”: “ ”,
“expires”: //the time (in milliseconds from epoch) when this token will expire
}
2.2 清除缓存方法的Url为
admin-url 上面已经提到,为http:// / /admin,例如 http://zbc/arcgis/rest/admin
这是一个GET方法,只需要在http:// /cache/clear后面加上token参数即可,此处的token即为我们上面通过generateToken方法得到的token。
该方法的另外一个参数为f,即返回数据格式,值为html或json,默认为html
该方法的返回结果为(JSON):
{
“success”: true //the value will always be true. Failure will result in an error response.
}
如果success参数的结果为true,则清除成功,否则失败。
3 Flex 代码实现
经过我们上面的分析,可以很明确的得到清除REST cache的步骤,那么下面我们就用flex来实现这个功能。
3.1 生成token
//获取token
private function getToken(adminUrl:String ,username:String,password:String)
{
var httpService:HTTPService = new HTTPService();
///构造generateToken方法Url
httpService.url = adminUrl+”/generateToken”;
//使用POST方法
httpService.method=”POST”;
var param:Object = new Object();
//用户名
param.username = username;
//密码
param.password = password;
//IP
param.ip = “”;
//referer
param.referer=”";
//client 使用requestip,因此ip和referer不填
param.client = “requestip”;
//超时设为1个小时
param.expiration = 60;
//以json方式返回
param.f=”json”;
httpService.addEventListener(ResultEvent.RESULT,OnResultGetToken);
httpService.addEventListener(FaultEvent.FAULT,OnFaultGetToken);
//发送请求
httpService.send(param);
}
3.2 清除REST缓存
private function Clear(adminUrl:String ,token:String)
{
var httpService:HTTPService = new HTTPService();
//构造清楚缓存Url
httpService.url = adminUrl+”/cache/clear?token=”+token+”&f=json”;
httpService.addEventListener(ResultEvent.RESULT,OnResultClear);
httpService.addEventListener(FaultEvent.FAULT,OnFaultClear);
//发送请求
httpService.send();
}
代码下载: