使用烧瓶限制器限制端点

时间:2018-01-02 12:26:49

标签: flask-restplus

我从旧项目中了解并喜欢_NSGetExecutablePath。现在我想在基于std::string appFilePath; CFBundleRef mainBundle = CFBundleGetMainBundle(); CFURLRef resourcesURL = CFBundleCopyBundleURL(mainBundle); CFStringRef cfStr = CFURLCopyFileSystemPath(resourcesURL, kCFURLPOSIXPathStyle); CFRelease(resourcesURL); char bundlePathStr[PATH_MAX]; CFStringGetCString(cfStr, bundlePathStr, FILENAME_MAX, kCFStringEncodingASCII); CFRelease(cfStr); const std::string bundlePath(bundlePathStr); uint32_t pathBufSize = 0; _NSGetExecutablePath(NULL, &pathBufSize); pathBufSize += 1024; // for expansion to abs path char* appPath = new char[pathBufSize + 1](); if (_NSGetExecutablePath(appPath, &pathBufSize) == 0 && realpath(std::string(appPath).c_str(), appPath) != NULL) // alternatively -- if(proc_pidpath(getpid(), topLevelAppPath, pathBufSize) > 0) { const std::string appPathBkp(appPath); const std::string appDirPath(dirname(appPath)); if (appDirPath == bundlePath) // ==> standalone executable appFilePath = appPathBkp; else // ==> bundled app appFilePath = bundlePath; } delete[] appPath; return appFilePath; 的项目中使用它。

我的最终解决方案将使我能够对每个方法级别进行速率限制。所以不同的费率适用于帖子而不是get方法。 但是如果我可以在每个资源(甚至每个命名空间)级别上定义限制,我会很高兴。 重要的是每个资源都需要自己的速率限制。

我的第一次尝试是使用flask-limiter注释方法。但这完全被忽略了。

接下来尝试而不是在命名空间本身上使用它:

flask-restplus

嗯,也不起作用。但

@limiter.limit("1 per Minute")

做的事情。但是留下了一个问题:我只能为每个应用定义一个限制器。所以我只能对我的所有命名空间应用一个限制规则。

关于如何让ns = api.namespace('something', description='Operations related to maps and positions on a map', decorators = [limiter.limit("1 Per Minute")] ) 接受传递给限制器装饰器的参数的任何想法?

或者是否有更好的方法来管理我刚才看不到的烧瓶中的限速?

0 个答案:

没有答案