[
https://issues.apache.org/jira/browse/CLOUDSTACK-926?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13554086#comment-13554086
]
Sudha Ponnaganti commented on CLOUDSTACK-926:
---------------------------------------------
No specific QA required. Need unit test results to close the task.
> ApiDiscoverService: Implement a plugin mechanism that exposes the list of
> APIs through a discovery service on the management server
> -----------------------------------------------------------------------------------------------------------------------------------
>
> Key: CLOUDSTACK-926
> URL: https://issues.apache.org/jira/browse/CLOUDSTACK-926
> Project: CloudStack
> Issue Type: New Feature
> Security Level: Public(Anyone can view this level - this is the
> default.)
> Components: API
> Affects Versions: 4.0.0
> Reporter: Prasanna Santhanam
> Assignee: Rohit Yadav
> Fix For: 4.1.0
>
>
> The API discovery service will allow and end point to list of its supported
> APIs and their details. Consumers can be CLI clients and wrappers that build
> on top of the available list of APIs exposed by a Cloudstack instance.
> The response structure is an array of apis with:
> name (name of the api command), description (or docstring), since (version
> since the api was introduced, empty suggests it was pre 3.x), isasync (true
> if api is asynchronous), array of dictionary of params.
> The structure for list of params is:
> name (name of the parameter), description (or doctoring for the parameter),
> type (kind of parameter, bool, long, map, uuid etc.), length (allowed max
> length for the param, default is 255), required (if param is
> +necessary for making an api request), since (CloudStack versions no. in
> which param was introduced, empty suggests it was introduced when the api was
> introduced).
> Example response:
> { "listapisresponse" : { "count":301 ,"apis" : [
> {"name":"listAsyncJobs","description":"Lists all pending asynchronous jobs
> for the
> +account.","since":"","isasync":false,"param":[{"name":"pagesize","description":"","type":"INTEGER","length":255,"required":false,"since":""},{"name":"domainid","description":"list
> only resources belonging to
> +the domain
> specified","type":"UUID","length":255,"required":false,"since":""},{"name":"listall","description":"If
> set to false, list only resources belonging to the command's caller; if set
> to true - list
> +resources that the caller is authorized to see. Default value is
> false","type":"BOOLEAN","length":255,"required":false,"since":""},{"name":"account","description":"List
> resources by account. Must be used with
> +the domainId
> parameter.","type":"STRING","length":255,"required":false,"since":""},{"name":"startdate","description":"the
> start date of the async
> +job","type":"TZDATE","length":255,"required":false,"since":""},{"name":"page","description":"","type":"INTEGER","length":255,"required":false,"since":""},{"name":"isrecursive","description":"defaults
> to false,
> +but if true, lists all resources from the parent specified by the domainId
> till
> leaves.","type":"BOOLEAN","length":255,"required":false,"since":""},{"name":"keyword","description":"List
> by
> +keyword","type":"STRING","length":255,"required":false,"since":""}]}
> This information is pre-cached during load time (when mgmt server starts) as
> a list of response by the plugin and it takes about 677 milliseconds to
> generate mapping of apiname and cmd class and 89 milliseconds
> +to pre cache the response object:
> INFO [cloudstack.discovery.ApiDiscoveryServiceImpl] (main:) Generated
> apiname, cmd class mapping in 677 ms
> INFO [cloudstack.discovery.ApiDiscoveryServiceImpl] (main:) Discovered api,
> precached response in 89 ms
> The plugin is an adapter, also a pluggable service and provides an api cmd
> class with apiname listApis (suggest a better name, listApis made sense as
> the response is list of Apis + docs available on the CS mgmt
> +server to the user).
> Based on parameter annotation, we can also return information of related apis
> for a particular apis (based on response class, say all vm related apis have
> same response class) and also suggest apis to get the
> +parameter (wherever applicable, we know entityType, so we know the response
> class). Do we want such a feature?
> Since, this is a plugin and has its own commands.properties, one can
> blacklist or change role based acl (in commands.properties) or disable plugin
> (from components.xml) to controls or use this plugin as a
> +starting point to make their own discovery service (not just apis, think
> discovery of resources etc.).
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira