Hi Nirmal, Can you share this in the form of a sheet ? Then we can have a suggested column to have the diffs
Thank you, Shiro On Mon, Oct 6, 2014 at 7:23 AM, Nirmal Fernando <nirmal070...@gmail.com> wrote: > Thanks Akila for going through and identifying collisions. > > On Sun, Oct 5, 2014 at 11:26 PM, Akila Ravihansa Perera < > raviha...@wso2.com> wrote: > >> Hi Nirmal, >> >> Great work on re-factoring REST API! >> >> I think these request paths might cause collisions. >> >> 1. /cartridges/multiTenant, /cartridges/singleTenant, >> /cartridges/{cartridgeType} >> > > I don't think in a real world, we would have a {cartridgeType} called > 'singleTenant' or 'multiTenant'. Do you think? > > >> >> >> 2. /clusters/{cartridgeType}, /clusters/{subscriptionAlias}, >> /clusters/{clusterId} >> > > This is true, thanks again! So, we could refactor to something like: > > /clusters/cartridgeType/{cartridgeType} > /clusters/alias/{subscriptionAlias} > /clusters/{clusterId} > > Any other better way? > > >> >> I might be wrong...but just wanted to clarify :) >> >> Thanks. >> >> On Sun, Oct 5, 2014 at 9:06 PM, Udara Liyanage <ud...@wso2.com> wrote: >> >>> +1 for refactoring, some paths does not adhere to REST best practices >>> >>> On Sun, Oct 5, 2014 at 8:54 PM, Nirmal Fernando <nirmal070...@gmail.com> >>> wrote: >>> >>>> Hi Guys, >>>> >>>> As discussed previously, I've been going through all the API operations >>>> exposed via Stratos REST API and identified following set of APIs need to >>>> be refactored to have a RESTful design. While doing this, I've also >>>> identified sub-APIs that we have provided (under Entity column) and I >>>> suggest we could introduce sub-API classes as it makes the StratosAdmin >>>> class more readable. >>>> >>>> There're 40+ API operations ([?]), hence there could be places that >>>> I've not suggested proper refactoring. Please go through the list and >>>> provide improvements/comments, we can discuss/argue, then conclude and >>>> build a clean API for Stratos. >>>> >>>> IMO we also need to place a review process when adding a new API, it >>>> could save lot of time spending on cleaning things up. I propose, API >>>> introducer should initiate a discuss thread and a vote before committing >>>> them to the repository. >>>> >>>> I'll keep this thread open for 48hrs for comments and/or improvements. >>>> >>>> EntityHTTP OperationAPI Operation Name -> Suggested NameRequest >>>> PathProposed >>>> PathCartridgePOSTdeployCartridgeDefinition/cartridge/definition/ >>>> /cartridgesDELETEunDeployCartridgeDefinition >>>> /cartridge/definition/{cartridgeType}/cartridges/{cartridgeType}GETgetValidDeploymentPolicies >>>> -> getValidDeploymentPoliciesOfCartridge >>>> {cartridgeType}/policy/deployment >>>> /cartridges/{cartridgeType}/deploymentPolicyGETgetAvailableMultiTenantCartridges >>>> -> getMultiTenantCartridges/cartridge/tenanted/list >>>> /cartridges/multiTenantGETgetAvailableSingleTenantCartridges -> >>>> getSingleTenantCartridges/cartridge/list/cartridges/singleTenantGETgetAvailableCartridges >>>> -> >>>> getCartridges/cartridge/available/list/cartridgesGETgetAvailableSingleTenantCartridgeInfo >>>> -> getAvailableSingleTenantCartridge >>>> /cartridge/available/info/{cartridgeType} >>>> /cartridges/{cartridgeType}/singleTenantGETgetAvailableLbCartridges >>>> /cartridge/lb/cartridges/loadBalancerPartitionPOSTdeployPartition >>>> /policy/deployment/partition/partitionsGETgetPartitions/partition >>>> /partitionsGETgetPartition/partition/{partitionId} >>>> /partitions/{partitionId}Autoscaling PolicyPOST >>>> deployAutoscalingPolicyDefintion/policy/autoscale/autoscalePoliciesGETgetAutoscalePolicies >>>> -> >>>> getAutoscalingPolicies/policy/autoscale/autoscalePoliciesGETgetAutoscalePolicies >>>> -> getAutoscalingPolicy/policy/autoscale/{autoscalePolicyId} >>>> /autoscalePolicies/{autoscalePolicyId}Deployment PolicyPOST >>>> deployDeploymentPolicyDefinition/policy/deployment/deploymentPolicies >>>> GETgetDeploymentPolicies/policy/deployment/deploymentPoliciesGETgetDeploymentPolicies >>>> -> getDeploymentPolicy/policy/deployment/{deploymentPolicyId} >>>> /deploymentPolicies/{deploymentPolicyId}Partition GroupGET >>>> getPartitionGroups/partition/group/{deploymentPolicyId} >>>> /deploymentPolicies/{deploymentPolicyId}/partitionGroupGETgetPartitions >>>> -> getPartitionGroup/partition/{deploymentPolicyId}/{partitionGroupId} >>>> /deploymentPolicies/{deploymentPolicyId}/partitionGroup/{partitionGroupId} >>>> GETgetPartitionsOfPolicy/partition/{deploymentPolicyId} >>>> /deploymentPolicies/{deploymentPolicyId}/partitionSubscriptionsGET >>>> getSubscribedCartridges/cartridge/list/subscribed >>>> /subscriptions/cartridgesGETgetSubscribedCartridgesForServiceGroup -> >>>> getSubscribedCartridgesOfServiceGroup >>>> /cartridge/list/subscribed/group/{serviceGroup} >>>> /subscriptions/cartridges/groups/{serviceGroup}GETgetCartridgeInfo -> >>>> getSubscribedCartridgeInfo/cartridge/info/{subscriptionAlias} >>>> /subscriptions/{subscriptionAlias}/cartridgesGETgetActiveInstances -> >>>> getActiveMembersCountOfSubscription >>>> /cartridge/active/{cartridgeType}/{subscriptionAlias} >>>> /subscriptions/{subscriptionAlias}/cartridges/{cartridgeType}/active >>>> POSTsubscribe/cartridge/subscribe/subscriptionsDELETEunsubscribe >>>> /cartridge/unsubscribe/subscriptions/{subscriptionAlias}POST >>>> addSubscriptionDomains >>>> /cartridge/{cartridgeType}/subscription/{subscriptionAlias}/domains >>>> /subscriptions/{subscriptionAlias}/domainsGETgetSubscriptionDomains >>>> /cartridge/{cartridgeType}/subscription/{subscriptionAlias}/domains >>>> /subscriptions/{subscriptionAlias}/domainsGETgetSubscriptionDomain >>>> /cartridge/{cartridgeType}/subscription/{subscriptionAlias}/domains/{domainName} >>>> /subscriptions/{subscriptionAlias}/domains/{domainName}DELETE >>>> removeSubscriptionDomain >>>> /cartridge/{cartridgeType}/subscription/{subscriptionAlias}/domains/{domainName} >>>> /subscriptions/{subscriptionAlias}/domains/{domainName}ClustersGETgetClustersForTenant >>>> -> getClustersOfTenant/cluster//clustersGETgetClusters -> >>>> getClustersOfCartridge/cluster/{cartridgeType}/ >>>> /clusters/{cartridgeType}GETgetServiceClusters (This seems to do the >>>> same job as getClusters - I suggest we deprecate this.)GETgetCluster >>>> -> getClusterOfSubscription/cluster/{cartridgeType}/{subscriptionAlias} >>>> /clusters/{subscriptionAlias}GETgetCluster >>>> /cluster/clusterId/{clusterId}/clusters/{clusterId}GET >>>> getLoadBalancerCluster >>>> /cartridge/{cartridgeType}/subscription/{subscriptionAlias}/load-balancer-cluster >>>> /clusters/{subscriptionAlias}/loadBalancerTenantsGETretrieveTenants >>>> /tenant/list/tenants/list(All paths will be refactored to start from >>>> /tenants )Services POSTdeployService/service/definition/servicesDELETE >>>> unDeployService/service/definition/{serviceType}/services/{serviceType}(All >>>> paths will be refactored to start from /services )GIT >>>> RepositoriesPOSTgetRepoNotification >>>> -> notifyRepository/reponotification/repo/notifyPOSTsynchronizeRepository >>>> -> synchronizeRepositoryOfSubscription/cartridge/sync >>>> /repo/synchronize/{subscriptionAlias}UsersGETretrieveUsers/user/list >>>> /usersKubernetes HostsPOSTdeployKubernetesGroup -> >>>> deployKubernetesHostCluster/kubernetes/deploy/group/kubernetesCluster >>>> PUTdeployKubernetesHost/kubernetes/deploy/host/{kubernetesGroupId} >>>> /kubernetesCluster/{kubernetesClusterId}/minionPUT >>>> updateKubernetesMaster/kubernetes/update/master >>>> /kubernetesCluster/{kubernetesClusterId}/masterPATCH >>>> updateKubernetesHost/kubernetes/update/host >>>> /kubernetesCluster/{kubernetesClusterId}/minion/{minionId}GETgetKubernetesGroups >>>> -> >>>> getKubernetesHostClusters/kubernetes/group/kubernetesClusterGETgetKubernetesGroup >>>> -> getKubernetesHostCluster/kubernetes/group/{kubernetesGroupId} >>>> /kubernetesCluster/{kubernetesClusterId}GETgetKubernetesHosts -> >>>> getKubernetesHostsOfKubernetesCluster >>>> /kubernetes/hosts/{kubernetesGroupId} >>>> /kubernetesCluster/{kubernetesClusterId}/hostsGETgetKubernetesMaster >>>> -> getKubernetesMasterOfKubernetesCluster >>>> /kubernetes/master/{kubernetesGroupId} >>>> /kubernetesCluster/{kubernetesClusterId}/masterDELETEunDeployKubernetesGroup >>>> -> unDeployKubernetesHostCluster/kubernetes/group/{kubernetesGroupId} >>>> /kubernetesCluster/{kubernetesClusterId}DELETEunDeployKubernetesHost >>>> -> unDeployKubernetesHostOfKubernetesCluster >>>> /kubernetes/host/{kubernetesHostId} >>>> /kubernetesCluster/{kubernetesClusterId}/hosts/{hostId} >>>> >>>> >>>> -- >>>> Best Regards, >>>> Nirmal >>>> >>>> Nirmal Fernando. >>>> PPMC Member & Committer of Apache Stratos, >>>> Senior Software Engineer, WSO2 Inc. >>>> >>>> Blog: http://nirmalfdo.blogspot.com/ >>>> >>> >>> >>> >>> -- >>> >>> Udara Liyanage >>> Software Engineer >>> WSO2, Inc.: http://wso2.com >>> lean. enterprise. middleware >>> >>> web: http://udaraliyanage.wordpress.com >>> phone: +94 71 443 6897 >>> >> >> >> >> -- >> Akila Ravihansa Perera >> Software Engineer, WSO2 >> >> Blog: http://ravihansa3000.blogspot.com >> > > > > -- > Best Regards, > Nirmal > > Nirmal Fernando. > PPMC Member & Committer of Apache Stratos, > Senior Software Engineer, WSO2 Inc. > > Blog: http://nirmalfdo.blogspot.com/ > -- Shiroshica Kulatilake Architect, WSO2, Inc. http://wso2.com/ Phone: +94 776523867