前言
本文闡述為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核心的一部分
注意當命令呼叫完成時,它們關聯的只能是cloud-api 或 cloud-util包裡的介面
當命令是外掛程式/服務的一部分
定義在外掛程式中的命令只關聯位於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 API程式設計指引
前言 本文闡述為cloudstack編寫新api或者更新已存在api時應遵循的約定和程式設計指引。參考文件 暫略 介紹 當你需要為cs新增新的api時,需要建立乙個request類和response類 或者在擴充套件cs api功能時它的api responese已經定義的情況下重用已經存在的api...
程式設計,還是程式設計
喜歡程式設計,雖然水平一般,但還是執著地學習與程式設計有關的知識。中間因為工作關係與程式設計遠離了一段時間,現在又重拾起來,細想起來還是因為喜歡吧。喜歡程式軟體的思想和原理,喜歡程式 的魅力和成就感。程式設計軟體的思想是最值得學習的,一直認為思想決定行動,思想改變世界。每種軟體的流行和受人追捧,無不...
少兒程式設計程式設計
機械人比賽,聽上去讓人有一種高大上的科技感,沒錯,在大多數人眼裡,玩機械人那是科學家做的事情,不過隨著機械人教育的普及,越來越多的孩子也能夠駕馭這高大上的機械人。格物斯坦小坦克告訴你原因,這是歸結於孩子對於程式設計課程的學習,學會對機械人進行程式設計了,自然就能玩轉機械人啦。參加機械人比賽的意義遠遠...