this.name = "rate_limiting_example"; function onApplicationStart(){ application.accessLog = queryNew('apiKey,accessTime','varchar,time'); application.accessLimit = 100; //requests application.accessPeriod = 60; //seconds return super.onApplicationStart(); } function onTaffyRequest(verb, cfc, requestArguments, mimeExt){ var usage = 0; //require some api key if (!structKeyExists(requestArguments, "apiKey")){ return noData().withStatus(401, "API Key Required"); } //check usage usage = getAccessRate(requestArguments.apiKey); if (usage lte application.accessLimit){ logAccess(requestArguments.apiKey); return true; }else{ return noData().withStatus(420, "Enhance your calm"); } return true; } select accessTime from application.accessLog where apiKey = and accessTime > delete from application.accessLog where accessTime <