Hi,

The description is clear to me, and the API design looks good!


Jinhua Luo <luajit...@gmail.com> 于2022年9月2日周五 11:45写道:

> 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