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*
_______________________________________________ Architecture mailing list Architecture@wso2.org https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture