Api 考虑到服务器无法访问或停机,如何使用Groovy编写URL HTTP Get?
我正在web应用程序中实现对MailChimp API的API调用。但是这个问题对于任何接受简单HTTP GET的API调用都是有效的 我希望捕获任何错误,并允许我的应用程序继续运行而不会出现问题,即使API调用失败、mailchimp服务器停机、速度慢或不可用 返回序列化的JSON对象。这是我的密码Api 考虑到服务器无法访问或停机,如何使用Groovy编写URL HTTP Get?,api,http,groovy,Api,Http,Groovy,我正在web应用程序中实现对MailChimp API的API调用。但是这个问题对于任何接受简单HTTP GET的API调用都是有效的 我希望捕获任何错误,并允许我的应用程序继续运行而不会出现问题,即使API调用失败、mailchimp服务器停机、速度慢或不可用 返回序列化的JSON对象。这是我的密码 def listSubscribe = { apiurl, apikey, listid, email -> def url = "${apiurl}?method=listSubs
def listSubscribe = { apiurl, apikey, listid, email ->
def url = "${apiurl}?method=listSubscribe&apikey=${apikey}&id=${listid}&email_address=${email}"
}
try {
def url = new URL(listSubscribe(apiUrl,apiKey,listId,email))
return (url.text == 'true') ? true : false
} catch (MalformedURLException e) {
return false
} catch (java.net.UnknownHostException e) {
return false
}
我应该做其他的尝试/捕捉吗?如何改进代码,使其更安全地进行不可访问的API调用
解决方案
为了使调用异步,并且由于我在Grails应用程序中使用了这段代码,所以我创建了一个用于执行包含API调用的服务的脚本
class MailChimpListSubscribeJob {
def mailChimpService
def execute(context) {
mailChimpService.listSubscribe(context.mergedJobDataMap.get('email'))
}
}
该服务现在使用超时并捕获一般异常:
class MailChimpService {
def grailsApplication
def listSubscribe(email_address) {
def apiurl = grailsApplication.config.mailchimp.apiUrl
def apikey = grailsApplication.config.mailchimp.apiKey
def listid = grailsApplication.config.mailchimp.listId
listSubscribe(apiurl, apikey, listid, email_address)
}
def listSubscribe(apiurl, apikey, listid, email) {
try {
def cmdurl = "${apiurl}?method=listSubscribe&apikey=${apikey}&id=${listid}&email_address=${email}"
def url = new URL(cmdurl)
def response = url.getText(connectTimeout: 4 * 1000, readTimeout: 4 * 1000)
return (response == 'true') ? true : false
} catch (MalformedURLException e) {
return false
} catch (java.net.UnknownHostException e) {
return false
} catch (Exception e) {
return false
}
}
}
在我的控制器中:
MailChimpListSubscribeJob.triggerNow([email: 'myemail@example.com'])
Sergio-您可能还需要执行以下操作:
如何使用URL类启用超时?我是否需要使用http builder之类的类?查看此博客:感谢您提供解释超时的链接