Background:

With consumer groups, you can define any number of plugins, e.g. rate
limiting and apply them to a set of consumers, instead of managing
each consumer individually.

While configuring the same plugin for the same route, only one copy of
the configuration is valid. The order of precedence is Consumer >
Consumer group > Route > plugin_config> Service.


Admin API design:

GET
/apisix/admin/consumer_groups
Fetches a list of all Consumer groups.

GET
/apisix/admin/consumer_groups/{id}
Fetches specified Consumer group by id.

PUT
/apisix/admin/consumer_groups/{id}
Creates or updates a new consumer group with the specified id.

DELETE
/apisix/admin/consumer_groups/{id}
Removes the Consumer group with the specified id.

PATCH
/apisix/admin/consumer_groups/{id}
Updates the attributes specified, existing Consumer group. To delete
an attribute, set value of attribute set to null.

PATCH
/apisix/admin/consumer_groups/{id}/{path}
Updates the attribute specified in the path. The values of other
attributes remain unchanged.


Add new variable to indicate the consumer group of the route: $consumer_group_id


Example:

curl http://127.0.0.1:9180/apisix/admin/consumer_groups/company_a -H
'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"limit-count": {
"count": 200,
"time_window": 60,
"rejected_code": 503,
"group": "$consumer_group_id"
}
}
}'


curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY:
edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"username": "jack",
"plugins": {
"key-auth": {
"key": "auth-one"
}
},
"group_id": "company_a"
}'


curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY:
edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"username": "johnson",
"plugins": {
"key-auth": {
"key": "auth-two"
}
},
"group_id": "company_a"
}'


curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY:
edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/get",
"plugins": {
"key-auth": {}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org": 1
}
}
}'


curl -i http://127.0.0.1:9180/get -H 'apikey: auth-one'
...
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 199
...


curl -i http://127.0.0.1:9180/get -H 'apikey: auth-two'
...
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 198
...

Reply via email to