+Amila De Silva <[email protected]>

On Mon, 2 Nov 2020 at 17:42, Uvindra Dias Jayasinha <[email protected]>
wrote:

>
>
> On Mon, 2 Nov 2020 at 17:36, Nuwan Dias <[email protected]> wrote:
>
>> Is the purpose of this feature to move throttling policies across
>> environments or across product versions?
>>
>> Across environments
>
> On Mon, Nov 2, 2020 at 5:02 PM Wasura Wattearachchi <[email protected]>
>> wrote:
>>
>>> Hi all,
>>>
>>> This is regarding the feature mentioned in [1] which requests to support
>>> importing and exporting throttling policies using the API Controller.
>>> Before discussing this new feature, let’s look at the current/existing
>>> behaviour of importing/exporting throttling policies and identify the
>>> limitations.
>>>
>>> Limitations in the Current Behaviour
>>>
>>> We have three (3) types of throttling policies.
>>>
>>>    1.
>>>
>>>    Advanced Throttling Policies
>>>
>>> These can be added for an API or for a particular resource of an API.
>>>
>>>    1.
>>>
>>>    When we export an API using the API Controller, if the Advanced
>>>    Throttling Policy was added to the whole API, then the throttling
>>>    policy name will be included in api.yaml file.
>>>    2.
>>>
>>>    When we export an API using the API Controller, if the Advanced
>>>    Throttling Policy was added to a particular resource, then the
>>>    throttling policy name will be included in the swagger.yaml file under 
>>> the
>>>    particular resource name.
>>>    3.
>>>
>>>    When the user is importing an API which was exported as mentioned
>>>    above, the Advanced Throttling Policies will be assigned to the API or to
>>>    the resource as expected if the policy currently exists in the API 
>>> Manager
>>>    instance.
>>>    4.
>>>
>>>    But, if the user is importing an API with an Advanced Throttling
>>>    Policy which is not currently available in the API Manager, the import 
>>> will
>>>    fail.
>>>
>>> (This behaviour is ideal to handle all the types of throttling policies
>>> which will be discussed next)
>>>
>>>
>>>    1.
>>>
>>>    Application-level Throttling Tiers/Policies
>>>
>>> These policies can be added for Applications.
>>>
>>>    1.
>>>
>>>    When we export an Application with an Application-level Throttling
>>>    Policy using the API Controller, the throttling policy name will be
>>>    included in the <application_name>.json file inside the exported 
>>> directory.
>>>    2.
>>>
>>>    When the user is importing an Application which was exported as
>>>    mentioned above, the Application-level Throttling Tier/Policy will be
>>>    assigned to the Application as expected if the policy currently exists in
>>>    the API Manager instance.
>>>    3.
>>>
>>>    But currently, even though the Application-level Throttling
>>>    Tier/Policy is not in the API Manager instance, the application will be
>>>    imported to that instance, which is wrong. Further, if a user login to 
>>> the
>>>    Devportal and check for the imported application, it will display an 
>>> error
>>>    as well. (The API Manager log will state that the particular
>>>    Application-level Throttling Tier/Policy is nowhere to be found)
>>>
>>> The behaviour of above C point should be changed and handled as stated
>>> under the section Advanced Throttling Policies D.
>>>
>>>
>>>    1.
>>>
>>>    Subscription-level Throttling Tiers/Policies
>>>
>>> These policies can be added for APIs.
>>>
>>>    1.
>>>
>>>    When we export an API with a Subscription-level Throttling
>>>    Tier/Policy using the API Controller, the throttling policy details
>>>    will be included in the api.yaml file inside the exported directory as an
>>>    array (Refer the below example).
>>>
>>>
>>> availableTiers:
>>>
>>>  -
>>>
>>>   name: MyPolicy
>>>
>>>   displayName: MyPolicy
>>>
>>>   description: Testing
>>>
>>>   tierAttributes: {}
>>>
>>>   requestsPerMin: 1
>>>
>>>   requestCount: 1
>>>
>>>   unitTime: 1
>>>
>>>   timeUnit: min
>>>
>>>   tierPlan: FREE
>>>
>>>   stopOnQuotaReached: true
>>>
>>>  -
>>>
>>>   name: Silver
>>>
>>>   displayName: Silver
>>>
>>>   description: Allows 2000 requests per minute
>>>
>>>   requestsPerMin: 2000
>>>
>>>   requestCount: 2000
>>>
>>>   unitTime: 1
>>>
>>>   timeUnit: min
>>>
>>>   tierPlan: FREE
>>>
>>>   stopOnQuotaReached: true
>>>
>>> This array should contain only the names of the Subscription-level
>>> Throttling Tiers/Policies. (In other words, this should be similar to
>>> what happened in Advanced Throttling Policies and Application-level
>>> Throttling Tiers/Policies wherein those scenarios only the names were
>>> exported)
>>>
>>> This should be fixed.
>>>
>>>    1.
>>>
>>>    When the user is importing an API which was exported as mentioned
>>>    above, the Subscription-level Throttling Tiers/Policies will be assigned 
>>> to
>>>    the API as expected if the policy exists in the API Manager instance. 
>>> This
>>>    behaviour is expected.
>>>    2.
>>>
>>>    But, if the user is importing an API with a Subscription-level
>>>    Throttling Tier/Policy which is not currently available in the API 
>>> Manager,
>>>    the import will fail. This behaviour is expected as well.
>>>
>>>
>>> New Requirements  and Features to Eliminate the Limitations
>>>
>>> As discussed above, the user should be able to import an API with a
>>> particular throttling policy only if that particular policy is already
>>> imported to that environment/instance. To facilitate this requirement, new
>>> commands should be introduced to export/import throttling policies, prior
>>> to export/import APIs. These commands can be in the below form.
>>>
>>> Command 1
>>>
>>> Command
>>>
>>> apictl export throttling-policy [flags]
>>>
>>> Examples
>>>
>>> apictl export throttling-policy -n MyThrottlingPolicy -t advanced -e
>>> environment
>>>
>>> Flags
>>>
>>> Mandatory
>>>
>>>                     -n, --name string              Name of the
>>> Throttling Policy to be exported
>>>
>>>                     -t, --type string             Type of the
>>> Throttling Policy (Can be advanced, application, subscription)
>>>
>>>            -e, --environment string   Environment to the which the
>>> Throttling Policy should be imported
>>>
>>> Optional
>>>
>>>                     --format string                  File format of
>>> exported file (default "YAML")
>>>
>>> Command 2
>>>
>>> Command
>>>
>>> apictl import throttling-policy [flags]
>>>
>>> Example
>>>
>>> apictl import throttling-policy -f /home/wasura/mypolicy.yaml -t
>>> advanced -e environment
>>>
>>> Flags
>>>
>>> Mandatory
>>>
>>>                     -f, --file string                  Name/Path of the
>>> Throttling Policy to be imported
>>>
>>>                     -t, --type string             Type of the
>>> Throttling Policy (Can be advanced, application, subscription)
>>>
>>>            -e, --environment string   Environment from which the
>>> Throttling Policy should be exported
>>>
>>> Optional
>>>
>>>                   --update                       Update an existing
>>> Throttling Policy or create a new Throttling Policy
>>>
>>> REST API Requirements
>>>
>>> To implement the above commands in the API Controller side, REST APIs
>>> related to the throttling policies are needed. IMO, we can use the existing
>>> REST APIs as explained below.
>>>
>>> To retrieve the throttling policy, the API Controller side can call
>>> either of the below three (3) REST API resources in Admin V1 REST API
>>> according to the type specified by -t (--type). Then, we can print it to a
>>> YAML/JSON file and export/save it from the API Controller itself.
>>>
>>>
>>>    1.
>>>
>>>    To export Advanced Throttling Policies - GET
>>>    /throttling/policies/advanced
>>>    2.
>>>
>>>    To export  Application-level Throttling Tiers/Policies - GET
>>>    /throttling/policies/application
>>>    3.
>>>
>>>    To export  Subscription-level Throttling Tiers/Policies - GET
>>>    /throttling/policies/subscription
>>>
>>>
>>> To import the throttling policy, the API Controller side can call either
>>> of the below three (3) REST API resources in Admin V1 REST API according to
>>> the type specified by -t (--type).
>>>
>>>
>>>    1.
>>>
>>>    To import Advanced Throttling Policies - POST
>>>    /throttling/policies/advanced
>>>
>>> (PUT /throttling/policies/advanced/{policyId} when the --update flag is
>>> specified)
>>>
>>>    1.
>>>
>>>    To import  Application-level Throttling Tiers/Policies - POST
>>>    /throttling/policies/application
>>>
>>> (PUT /throttling/policies/application/{policyId} when the --update flag
>>> is specified)
>>>
>>>    1.
>>>
>>>    To import  Subscription-level Throttling Tiers/Policies - POST
>>>    /throttling/policies/subscription
>>>
>>> (PUT /throttling/policies/subscription/{policyId} when the --update flag
>>> is specified)
>>>
>>> Your feedback on the above-stated feature will be much appreciated
>>> before starting the implementation.
>>>
>>> [1] https://github.com/wso2/product-apim-tooling/issues/329
>>>
>>> Thank you!
>>> --
>>> *Wasura Wattearachchi* | Software Engineer | WSO2 Inc.
>>> (m) +94775396038 | (e) [email protected] | (b) Medium
>>> <https://medium.com/@wasuradananjith>
>>> [image: http://wso2.com/signature] <http://wso2.com/signature>
>>>
>>>
>>>
>>
>> --
>> *Nuwan Dias* | VP and deputy CTO - API Management and Integration | WSO2
>> Inc.
>> (m) +94 777 775 729 | (e) [email protected]
>>
>
>
> --
> Regards,
> Uvindra
>
> Mobile: 777733962
>


-- 
Regards,
Uvindra

Mobile: 777733962
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to