+1 to make the commands consistent and create an issue to track.
We should evaluate a few other CLI tools too and see what is the best
approach (deciding a command format and deprecating commands). A couple of
"newly added commands" Wasura mentioned above are already in the pipeline
for apictl 3.1.1 patch release which will release within one or two weeks'
time. We should make a proper and a bit faster decision and change those
commands before the patch release.

Thanks!
Malintha



On Thu, Apr 30, 2020 at 7:39 PM Harsha Kumara <hars...@gmail.com> wrote:

> +1 for the change in the next release. @wasura @malintha shall we create a
> issue and track it?
>
> On Fri, May 1, 2020 at 12:06 AM Bhathiya Jayasekara <bhath...@wso2.com>
> wrote:
>
>> Yes, we can keep both formats for some time, and mention the old format
>> is deprecated. It won't affect any existing users that way. We just need to
>> decide when we can do this.
>>
>> Thanks,
>> Bhathiya
>>
>> On Thu, Apr 30, 2020 at 6:57 PM Harsha Kumara <hars...@gmail.com> wrote:
>>
>>>
>>>
>>> On Thu, Apr 30, 2020 at 11:18 PM Uvindra Dias Jayasinha <
>>> uvin...@wso2.com> wrote:
>>>
>>>> Ideally it would be great if we could make the commands more consistent
>>>> but we need to take care about changing existing ones because we can end up
>>>> breaking customers existing CI/CD flows.
>>>>
>>>> The commands are now a binding API. If we are changing them in the
>>>> future we need to first deprecate the current ones.
>>>>
>>> Yes that's what I meant to decide best way to migrate our existing
>>> commands later and adhere new commands to the convention. We still may have
>>> the old commands in depreciated mode and do a release with the changes. We
>>> can't change old commands without addressing the backward compatibility.
>>>
>>>>
>>>> On Thu, 30 Apr 2020 at 18:10, Harsha Kumara <hars...@gmail.com> wrote:
>>>>
>>>>>
>>>>>
>>>>> On Thu, Apr 30, 2020 at 10:02 PM Wasura Wattearachchi <was...@wso2.com>
>>>>> wrote:
>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> There are two (2) types of command signatures in API Controller such
>>>>>> as apictl [verb] [noun] [flags] and apictl [command] [flags]. Below
>>>>>> are the commands belonging to those two (2) categories.
>>>>>>
>>>>>> apictl [verb] [noun] [flags]
>>>>>>
>>>>>> apictl [command] [flags]
>>>>>>
>>>>>> Existing commands:
>>>>>>
>>>>>>    -
>>>>>>
>>>>>>    apictl list apis [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl list apps [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl login <env-name> [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl logout <env-name> [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl install api-operator [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl uninstall api-operator [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl change registry [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl version <---- apictl noun only
>>>>>>    -
>>>>>>
>>>>>>    apictl help     <----- apictl verb only
>>>>>>
>>>>>>
>>>>>> Newly added  commands:
>>>>>>
>>>>>>    -
>>>>>>
>>>>>>    apictl list api-products [flags]
>>>>>>
>>>>>> Existing commands:
>>>>>>
>>>>>>    -
>>>>>>
>>>>>>    apictl add [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl add-env [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl remove-env [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl export-api [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl export-apis [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl export-app [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl import-api [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl import-app [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl init [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl get-keys [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl set [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl update [flags]
>>>>>>
>>>>>>
>>>>>> Newly added commands:
>>>>>>
>>>>>>    -
>>>>>>
>>>>>>    apictl delete-api [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl change-api-status [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl delete-api-product [flag]
>>>>>>
>>>>>>
>>>>>> Commands to be added:
>>>>>>
>>>>>>    -
>>>>>>
>>>>>>    apictl import-api-product [flags]
>>>>>>    -
>>>>>>
>>>>>>    apictl export-api-product [flags]
>>>>>>
>>>>>>
>>>>>> Eventually, it would be better if we can stick into one command
>>>>>> structure (which is apictl [verb] [noun] [flags]) as
>>>>>> @Bhathiya Jayasekara <bhath...@wso2.com> and @Harsha Kumara
>>>>>> suggested. +1 for that, since the commands will be more consistent.
>>>>>>
>>>>>> But Is it okay to start with the commands for API Products only (IMO,
>>>>>> users will be confused if this is only done for API Products, not APIs or
>>>>>> Apps) or shall we convert all the commands at once, in a future release?
>>>>>>
>>>>> Yes it would good if those commands become more consistent. At the
>>>>> moment we should follow the proper strategy when adding new commands. We
>>>>> may need to decide best way to move existing commands to a consistent
>>>>> format. Having consistency will make commands less complicated.
>>>>>
>>>>>>
>>>>>> Your opinions will be highly appreciated.
>>>>>>
>>>>>> Thank you!
>>>>>>
>>>>>> On Thu, Apr 16, 2020 at 10:13 AM Wasura Wattearachchi <
>>>>>> was...@wso2.com> wrote:
>>>>>>
>>>>>>> Hi all,
>>>>>>>
>>>>>>> This is regarding the issue
>>>>>>> <https://github.com/wso2/product-apim-tooling/issues/168> which
>>>>>>> requests to support listing and generating tokens for API Products 
>>>>>>> through
>>>>>>> API Controller (apictl). Currently, we do not support any functionality
>>>>>>> related to API Products from API Controller side. Thus, we can introduce
>>>>>>> the following four (4) functionalities as a new feature (rather than a 
>>>>>>> fix
>>>>>>> to the above-stated issue) in order to improve API Controller, 
>>>>>>> additional
>>>>>>> to what has been requested in the above issue.
>>>>>>>
>>>>>>>
>>>>>>>    1.
>>>>>>>
>>>>>>>    Import API Products
>>>>>>>    2.
>>>>>>>
>>>>>>>    Export API Products
>>>>>>>    3.
>>>>>>>
>>>>>>>    List API Products
>>>>>>>    4.
>>>>>>>
>>>>>>>    Generate keys (tokens) for API Products
>>>>>>>
>>>>>>>
>>>>>>> Approaches
>>>>>>>
>>>>>>> Here, we can identify two (2) approaches for importing/exporting API
>>>>>>> Products.
>>>>>>>
>>>>>>> Approach 1 - Import/export without the dependant APIs
>>>>>>>
>>>>>>>    1.
>>>>>>>
>>>>>>>    Import API Products
>>>>>>>
>>>>>>> Allow to import an API Product only if the dependent APIs have been
>>>>>>> already imported/created inside the API Manager. The main task here
>>>>>>> is to check whether the required resources to create the API Product are
>>>>>>> with the APIs in the API Manager.
>>>>>>>
>>>>>>>    1.
>>>>>>>
>>>>>>>    Export API Products
>>>>>>>
>>>>>>> Allow to export/download an API Product without the related APIs
>>>>>>> inside the archive file.
>>>>>>>
>>>>>>> Approach 2 - Import/export with the dependant APIs
>>>>>>>
>>>>>>>    1.
>>>>>>>
>>>>>>>    Import API Products
>>>>>>>
>>>>>>> Give freedom to the user to import an API Product along with the
>>>>>>> related APIs (archived together) only if the dependent APIs have
>>>>>>> not been already imported/created inside the API Manager. If the
>>>>>>> user tries to import an already imported API/APIs when importing the API
>>>>>>> Product, an error should be displayed.
>>>>>>>
>>>>>>>    1.
>>>>>>>
>>>>>>>    Export API Products
>>>>>>>
>>>>>>> Allow to export/download an API Product with the dependent APIs
>>>>>>> inside the archive file.
>>>>>>>
>>>>>>> Comparison of Approach 1 and 2
>>>>>>>
>>>>>>> Approach 1
>>>>>>>
>>>>>>> Approach 2
>>>>>>>
>>>>>>>    -
>>>>>>>
>>>>>>>    Advantage
>>>>>>>
>>>>>>> Basically our rule would be "If you need to create a CI/CD process
>>>>>>> for an API Product, you should already have performed CI/CD process for 
>>>>>>> all
>>>>>>> the dependent APIs".
>>>>>>>
>>>>>>> So as you can see, after doing CI/CD for each independent API you
>>>>>>> will have all the required APIs imported/exported. Then you can proceed
>>>>>>> with CI/CD for API Products smoothly since the required APIs have been
>>>>>>> already imported/exported. (If APIs are shared between two or more API
>>>>>>> Products, when importing those API Products, those shared APIs will not 
>>>>>>> be
>>>>>>> imported/updated repeatedly, which is efficient)
>>>>>>>
>>>>>>>
>>>>>>>    -
>>>>>>>
>>>>>>>    Disadvantage
>>>>>>>
>>>>>>> Manually need to setup the CI/CD flows for API Products as the tool
>>>>>>> does not take care of updating the dependent APIs.
>>>>>>>
>>>>>>>    -
>>>>>>>
>>>>>>>    Advantage
>>>>>>>
>>>>>>> Easier to setup the CI/CD flows for API Products as the tool takes
>>>>>>> care of updating the dependent APIs.
>>>>>>>
>>>>>>>
>>>>>>>    -
>>>>>>>
>>>>>>>    Disadvantage
>>>>>>>
>>>>>>> If APIs are shared between two or more API Products, when importing
>>>>>>> those API Products, those shared APIs will be imported/updated 
>>>>>>> repeatedly,
>>>>>>> which is inefficient.
>>>>>>>
>>>>>>> Commands to be used
>>>>>>>
>>>>>>> Here, we can identify two (2) ways such as using existing commands
>>>>>>> or using a new set of commands.
>>>>>>>
>>>>>>> Using existing commands
>>>>>>>
>>>>>>>    1.
>>>>>>>
>>>>>>>    Import API Products
>>>>>>>
>>>>>>> Use the same command that we currently use to import an API “apictl
>>>>>>> import-api”.
>>>>>>>
>>>>>>>    1.
>>>>>>>
>>>>>>>    Export API Products
>>>>>>>
>>>>>>> Use the same command that we currently use to export an API “apictl
>>>>>>> export-api”.
>>>>>>>
>>>>>>> Currently, name (-n) and (-v) are mandatory in the export-api
>>>>>>> command. But for products, we do not have a version. So we cannot make 
>>>>>>> the
>>>>>>> version parameter mandatory. If we do not mandate it, no issue with
>>>>>>> products, but we need a way to download APIs without the version param.
>>>>>>> Then we can follow the approach like: if there is only one API with
>>>>>>> name:foo, we download it. But if there are multiple APIs with name:foo
>>>>>>> (with multiple versions) we give an error.
>>>>>>>
>>>>>>>    1.
>>>>>>>
>>>>>>>    List API Products
>>>>>>>
>>>>>>> List API Products along with the APIs using the existing command “apictl
>>>>>>> list apis”. Further, we can improve this command by introducing a
>>>>>>> flag such as --api-products which can take either true or false. If 
>>>>>>> true is
>>>>>>> given, the API Products will be listed along with the APIs and if false 
>>>>>>> is
>>>>>>> given, only the APIs will get listed (which is similar to the current
>>>>>>> behaviour of “apictl list apis” command) not API Products. (This is
>>>>>>> recommended if you choose Command 1 in both import and export as stated
>>>>>>> earlier to maintain the consistency)
>>>>>>>
>>>>>>>    1.
>>>>>>>
>>>>>>>    Generate keys (tokens) for API Products
>>>>>>>
>>>>>>> We can extend the current command “apictl get-keys” which has the
>>>>>>> ability to generate keys for APIs, in a way that it will have the 
>>>>>>> ability
>>>>>>> to generate keys for API Products as well.
>>>>>>>
>>>>>>> Using a new set of commands
>>>>>>>
>>>>>>>    1.
>>>>>>>
>>>>>>>    Import API Products
>>>>>>>
>>>>>>> Introduce a new command similar to what we currently use when
>>>>>>> importing an API. Example:-  “apictl import-api-product”.
>>>>>>>
>>>>>>>    1.
>>>>>>>
>>>>>>>    Export API Products
>>>>>>>
>>>>>>> Introduce a new command similar to what we currently use when
>>>>>>> exporting an API. Example:-  “apictl export-api-product”.
>>>>>>>
>>>>>>>    1.
>>>>>>>
>>>>>>>    List API Products
>>>>>>>
>>>>>>> Introduce a separate command as “apictl list api-products” to list
>>>>>>> API Products.
>>>>>>>
>>>>>>> Comparison of  “Using existing commands” and “Using a new set of
>>>>>>> commands”
>>>>>>>
>>>>>>> Using existing commands
>>>>>>>
>>>>>>> Using a new set of commands
>>>>>>>
>>>>>>>    -
>>>>>>>
>>>>>>>    Advantage
>>>>>>>
>>>>>>> Can be used directly in CI/CD flow without worrying about the
>>>>>>> project type whether it is an API or an API Product. (Refer to the
>>>>>>> disadvantage of the other column for more information)
>>>>>>>
>>>>>>>
>>>>>>>    -
>>>>>>>
>>>>>>>    Disadvantage
>>>>>>>
>>>>>>> Since we are using “apictl export-api” (or “apictl import-api”)
>>>>>>> there is a wording issue.
>>>>>>>
>>>>>>> But IMO, this is not a problem, since API Product is in fact after
>>>>>>> all an API.
>>>>>>>
>>>>>>>    -
>>>>>>>
>>>>>>>    Advantage
>>>>>>>
>>>>>>> Since we have another command for importing/exporting apps as
>>>>>>> import-apps/export-apps, one could naturally go for a new command for
>>>>>>> import-api-product/export-api-product.
>>>>>>>
>>>>>>>
>>>>>>>    -
>>>>>>>
>>>>>>>    Disadvantage
>>>>>>>
>>>>>>> In CI/CD flow this can be a bit inconvenient because APIs and API
>>>>>>> Products are very similar, so would be its project structure. But from 
>>>>>>> the
>>>>>>> automation script, it has to figure out which command to execute:
>>>>>>> export-api or export-api-product (same for import as well), since it 
>>>>>>> does
>>>>>>> not know this project is an API or an API Product.
>>>>>>>
>>>>>>> Your feedback to choose the appropriate approaches and commands
>>>>>>> (with the problems that may arise) for each of the above tasks will be 
>>>>>>> much
>>>>>>> appreciated. Furthermore, it would be great if new more simplified
>>>>>>> approaches can be identified in addition to the above-stated approaches.
>>>>>>>
>>>>>>> Thank you!
>>>>>>> --
>>>>>>> *Wasura Wattearachchi* | Software Engineer | WSO2 Inc.
>>>>>>> (m) +94775396038 | (e) was...@wso2.com | (b) Medium
>>>>>>> <https://medium.com/@wasuradananjith>
>>>>>>> [image: http://wso2.com/signature] <http://wso2.com/signature>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> *Wasura Wattearachchi* | Software Engineer | WSO2 Inc.
>>>>>> (m) +94775396038 | (e) was...@wso2.com | (b) Medium
>>>>>> <https://medium.com/@wasuradananjith>
>>>>>> [image: http://wso2.com/signature] <http://wso2.com/signature>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> *Harsha Kumara*
>>>>> *PhD Student*
>>>>> *LaTrobe University*
>>>>>
>>>>
>>>>
>>>> --
>>>> Regards,
>>>> Uvindra
>>>>
>>>> Mobile: 777733962
>>>>
>>>
>>>
>>> --
>>> *Harsha Kumara*
>>> *PhD Student*
>>> *LaTrobe University*
>>>
>>
>>
>> --
>> *Bhathiya Jayasekara* | Senior Technical Lead | WSO2 Inc.
>> (m) +94 71 547 8185  | (e) bhathiya-@t-wso2-d0t-com
>>
>>
>>
>
> --
> *Harsha Kumara*
> *PhD Student*
> *LaTrobe University*
>


-- 
Malintha Amarasinghe
*WSO2, Inc. - lean | enterprise | middleware*
http://wso2.com/

Mobile : +94 712383306
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to