NREL / api-umbrella

Open source API management platform
MIT License
2.03k stars 325 forks source link

Question: Setting custom rate limits with Admin API #274

Open jykae opened 8 years ago

jykae commented 8 years ago

I am having problems setting custom rate limit through Admin API.

Docs http://api-umbrella.readthedocs.io/en/latest/admin/api.html say fields are:

ApiSettingsRateLimit {
id (string, optional),
duration (integer, optional),
accuracy (integer, optional),
limit_by (string, optional) = ['ip', 'apiKey'],
distributed (boolean, optional),
response_headers (boolean, optional)
}

Github code: https://github.com/NREL/api-umbrella/blob/222aa383e7b5b56d0f8ed38d58415da8d33f47a9/src/api-umbrella/web-app/app/assets/javascripts/admin/models/api/rate_limit.js

Admin.ApiRateLimit = Ember.Model.extend({
  id: Ember.attr(),
  duration: Ember.attr(Number),
  limitBy: Ember.attr(),
  limit: Ember.attr(),
  responseHeaders: Ember.attr(),

Is there only "duration" field and not "accuracy" field? If so, is duration in seconds, minutes, hours.. ?

In overall, would be great to have more documentation about the fields that are not self-descriptive.

jykae commented 8 years ago

As I looked further that Github code, looks like duration is in milliseconds, I got it somehow working by guessing and trying.

GUI commented 8 years ago

Sorry for the delay. Yes, duration and accuracy are both given in milliseconds. I'll try to get the docs updated about that.

duration is a required field, while accuracy is optional. In fact, we don't actually expose the accuracy field in our web admin tool, since we haven't really encountered a situation where it needs to be manually tuned.

But for a short description, accuracy essentially dictates how many buckets to divide the duration into for tracking purposes. There's a bit more info here: https://github.com/NREL/api-umbrella/blob/v0.13.0/config/README.md#apisettingsrate_limits You can also see the default accuracy logic based on the duration here: https://github.com/NREL/api-umbrella/blob/v0.13.0/src/api-umbrella/web-app/app/models/api/rate_limit.rb#L46-L74

jykae commented 8 years ago

Thanks for answer @GUI How can I set back to default rate limits through Admin API? Rate limit mode allowed values are ["unlimited", "custom"]

GUI commented 8 years ago

I believe a null value should also be allowed, which corresponds to the default value. Let us know if that's not the case, though.

jykae commented 8 years ago

@GUI Sorry for long delay, we had this task on hold. null works, resets to default rate limits

Please document it though, if others wonder the same.

onaralili commented 3 years ago

many years passed. Sorry for bringing this issue up.

I tried to apply rate limit to an API user with 30 days (2592000000) duration via Admin API. Although the rate limit seems to be inserted to the database, some fields like _id and id are null and on the dashboard the custom rate limit are not properly reflected (see the screenshot). Another weird behavior I noticed is that the rate limit works only for a day, the next day it resets. Are there any another fields need to be set via Admin API besides the ones under RateLimit?

Screen Shot 2021-01-15 at 12 17 19 PM