前言

本文阐述为CloudStack编写新API或者更新已存在API时应遵循的约定和编程指引。

参考文档

(暂略)

介绍

当你需要为CS添加新的API时,需要创建一个Request类和Response类(或者在扩展CS API功能时它的API Responese已经定义的情况下重用已经存在的API Response类)。

编写CS API Request类

1、request继承自*Cmd抽象类

CUD(新增/更新/删除 命令)

R(读取列表)命令

重要-从2.x开始,新的CUD API命令不再继承自BaseCmd 类,它们被看做是异步命令,继承自BaseAsyncCmd或者BaseAsyncCreateCmd。

扩展BaseAsyncCmd或者BaseAsyncCreateCmd,创建新的CS实体命令扩展BaseAsyncCreateCmd,UD命令扩展BaseAsyncCmd。

2、新添加的command类应以“*Cmd”结尾且标注@ApiCommand。更多请阅参考文档Annotations use in the API中的@ parameters。

3、定义所有的请求参数,且所有的都用@Parameter标注。

4、为RUD命令实现execute()方法,为R命令实现execute()/create()。

5、增加s_name--响应的名字,并且为小写。

6、在为命令命名时,根据含义优先使用create/delete/update/list,只有当这些前缀不能满足你的逻辑时才考虑用你自己的(如assign)。

编写CS API Response类

1、让你的类继承自BaseResponse。

2、用@EntityReference标注Response类,并设定关联的CloudStack接口,它是你返回给API用户的对象。比如VolumeResponse 用EntityReference 标注关联Volume接口。

3、将每个参数用@SerializedName 和 @Param注解。 请阅在Annotations use in the API中关于这些注解的细节。

4、参数名称都是小写。

5、确保没有将真实的DB id设置到id字段将其暴漏,请用UUID值代替。

API位置和注册

命令的位置取决于该命令将是可用/禁用插件或者CloudStack核心的一部分。

当命令是CS核心的一部分

位置:Reque/Response代码放在cloud-api/cloud-engine-api下。

访问权限:命令的访问控制权限(谁有能调用它)在commands.properties.in里注册。

命令注册:命令应添加到CS支持的所有的API列表中,该列表由ManagementServerImpl.getCommands()获得

注意当命令调用完成时,它们关联的只能是cloud-api 或 cloud-util包里的接口

当命令是插件/服务的一部分

位置:Reque/Response代码放在plugin包下。

访问权限:在Cmd文件里定义权限,使用@APICommand 注解"authorized"字段,如authorized = {RoleType.Admin}) 。

命令注册:让插件管理类继承自PluggableService 接口,增加到命令列表的命令由getCommands()返回。

定义在插件中的命令只关联位于cloud-api/cloud-utils/中的接口。

修改已存在API的规则

1、对Request:不要将参数从可选改为必需的;

2、对Request:不要在已存在的命令里增加一个required=true的参数;

3、对Request:不要降低command的权限,从对普通用户可用降到只对管理员可用;

4、对Request/Response:不要重命名已有的参数;

5、对Request/Response:不要更改参数的类型(如从String改为Map)

6、对Response:不要删除Response的参数,由于第三方软件会依赖它。

其它规则:

1、当新增一个参数时,应该在它的@Parameter 里标注"since=release #" 字段;

2、如果你认为有些参数会在未来被删除掉,请标注@Deprecated,并确保在第n版本里记录。当它发布后,客户有机会去检查/修改代码以去掉这个参数。于是可以在第n+1个版本去除该参数。

cloudstack java api_CloudStack API编程指引相关推荐

  1. api有哪些 javasocket_基于java的socket编程及API解析

    一.socket通讯过程 1.socket与socket编程简介: socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.通过 socket 这种约定,一台 ...

  2. kettlejava脚本的api_[翻译]KETTLE JAVA API :编程定制自己的Kettle转换(transformation)...

    本文描述了使用kettle API进行以下操作:1)建立一个新的转换(transformation)...... [翻译]KETTLE JAVA API :编程定制自己的Kettle转换(transf ...

  3. Java函数式编程教程(五):Java Steam API

    译:GentlemanTsao,2020-7-7 文章目录 Java Steam 定义 Steam 处理 获取Steam 终结操作和中间操作 中间操作 filter() map() flatMap() ...

  4. Hbase高手之路 -- 第五章 -- HBase的Java API编程

    Hbase高手之路 – 第五章 – HBase的Java API编程 一. 需求与数据集 某自来水公司,需要存储大量的缴费明细数据,以下截取了缴费明细的一部分内容: 因为缴费明细的数据记录非常庞大,该 ...

  5. Java工程师面试1000题152-Stream API编程练习

    152.Stream API编程练习 ①给定一个数字列表,如何返回一个由每个数的平方构成的列表?给定[1,2,3,4,5]返回[1,4,9,16,25] @Testpublic void test1( ...

  6. 【连载】Scala程序设计:Java虚拟机多核编程实战——简介

    可以在JVM上编程的语言有很多.通过这本书,我希望让你相信花时间学习Scala是值得的. Scala语言为并发.表达性和可扩展性而设计.这门语言及其程序库可以让你专注于问题领域,而无需深陷于诸如线程和 ...

  7. Java 7并发编程实战手册

    2019独角兽企业重金招聘Python工程师标准>>> Java 7并发编程实战手册 本书是 Java 7 并发编程的实战指南,介绍了Java 7 并发API 中大部分重要而有用的机 ...

  8. JAVA网络IO编程

    2019独角兽企业重金招聘Python工程师标准>>> JAVA网络IO编程(BIO NIO AIO) 一.传统的BIO编程 1.网络编程的基本模型是C/S模型,即两个进程间的通信. ...

  9. Java 常用API的运用,效率及技巧

    1.     Java面向对象基本概念 2.     System 3.     String, StringBuffer 4.     数值,字符,布尔对象与简单类型的操作 5.     Class ...

最新文章

  1. hibernate 双向n-n
  2. 【orange】【转】orange使用
  3. 轻松得到C# ADO.NET的各种数据库连接字符串
  4. 吴恩达 coursera ML 第一课总结
  5. log4j2 配置文件
  6. ansible编译httpd playbook示例
  7. python开发环境推荐_推荐一款Python开发环境管理神器
  8. C++小白课本练习1
  9. 注入漏洞之sql注入漏洞
  10. Microsoft Office 2016(ProPlus/Visio/Project) VOL 简体中文版
  11. office2016风格后台管理系统html模板下载-uimaker设计
  12. 学习c语言编程用什么软件_用C编程
  13. 网络维护汇总经典问题集
  14. 【Books系列】之第二本书:大冰《我不》读书笔记和读后感
  15. 启动jupyter notebook 报错:ImportError:DLL load failed,找不到指定模块的解决办法
  16. MacBook Pro维修过程
  17. DRM DUMB相关说明
  18. 计算几何(判断顺时针/逆时针) - Clockwise or Counterclockwise - HDU 6857
  19. Windows 10 IDM 下载play.kth.se上面的网课视频
  20. 实验吧web题(26/26)全writeup!超详细:)

热门文章

  1. struts 2 配置通配符
  2. --4、实验室设备管理(表)
  3. Thread.yield()
  4. Flask项目--注册
  5. iOS 抓包工具 charles工具
  6. java中 怎么获取bean_java普通类如何得到spring中的bean类
  7. mysql+根密码是什么意思,重设MySQL根密码
  8. php是一种,PHP是一种什么型的语言:()
  9. 文本分类的一种对抗训练方法
  10. 【读书笔记】【独立思考】2018-04-03(1)