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 > ... >