開發(fā)SDK的使用教程【面試+工作】 最近很多人反映工作中SDK不會用, 這個說實話不是個難點,只是你不敢操作。 下面以TFS使用和阿里SDK做教程 TFS SDK使用
|
驗證方式 | 說明 |
---|---|
AccessKey | 使用AccessKey ID和AccessKey Secret訪問 |
StsToken | 使用STS Token訪問 |
RamRoleArn | 使用RAM子賬號的AssumeRole方式訪問 |
EcsRamRole | 在ECS實例上通過EcsRamRole實現(xiàn)免密驗證 |
RsaKeyPair | 使用RSA公私鑰方式(僅日本站支持) |
本文以AccessKey為例說明如何設(shè)置憑據(jù)。為了保證您的賬號安全,建議您使用RAM賬號來訪問阿里云服務(wù)。阿里云賬號的AccessKey對擁有的資源有完全的權(quán)限。RAM賬號由阿里云賬號授權(quán)創(chuàng)建,僅有對特定資源限定的操作權(quán)限??醋钕旅娓戒洠簞?chuàng)建AccessKey獲取RAM賬號的AccessKey。
使用AccessKey作為訪問憑據(jù),需要在初始化Client時設(shè)置憑證。
注意:確保包含AccessKey的代碼不會泄漏(例如提交到外部公開的GitHub項目),否則將會危害您的阿里云賬號的信息安全。
本文以ECS為例,介紹如何使用阿里云Java SDK發(fā)起請求。
1.3.1新建一個AcsClient。
1.3.2創(chuàng)建請求。
請求類的命名規(guī)范為${apiName}Request
,其中
${apiName}為API名稱,例如DescribeInstances。
在引入多個產(chǎn)品SDK時,有可能存在Request類同名的情況,請注意按照package區(qū)分。
發(fā)起調(diào)用并處理應(yīng)答。
正常情況下,應(yīng)答中的所有字段,都會被反序列化到response中,您可以直接調(diào)用response.getXXX()
來獲得應(yīng)答中的字段。
如果出現(xiàn)了異常,或您需要原始HTTP應(yīng)答的情況下,您可以通過以使用doAction()
來獲取原始應(yīng)答。
2.使用CommonRequest進行調(diào)用
當您要訪問的API沒有產(chǎn)品SDK提供時,可以采用泛用型的API調(diào)用方式(CommonRequest)。使用CommonRequest調(diào)用方式可實現(xiàn)任意OpenAPI接口的調(diào)用。
CommonRequest有如下特點:
輕量:只需Core包即可發(fā)起調(diào)用,無需下載安裝各產(chǎn)品的SDK。
簡便:無需更新SDK即可調(diào)用最新發(fā)布的API。
快速迭代。
阿里云產(chǎn)品的API有RPC和RESTful兩種風格,不同風格的API的CommonRequest的調(diào)用方法也不同。
通常API參數(shù)中包含Action
參數(shù)的是RPC風格,包含PathPattern
參數(shù)的是RESTful風格。一般情況下,每個產(chǎn)品內(nèi),所有API的調(diào)用風格是統(tǒng)一的。每個API僅支持特定的一種風格調(diào)用,傳入錯誤的標識,可能會調(diào)用到其他API,或收到ApiNotFound
的錯誤信息。
發(fā)起一次CommonRequest請求,您需要獲取以下幾個參數(shù)的值。您可以在文檔中心-https://help.aliyun.com/各產(chǎn)品的API文檔中獲取以下參數(shù)的值。此外,部分產(chǎn)品也可以通過OpenAPI Explorer-https://api.aliyun.com/來獲取API的參數(shù)信息。
域名(domain):該產(chǎn)品的通用訪問域名。
API版本(version):該API的版本號,格式為YYYY-MM-DD。
說明:在”公共參數(shù)”內(nèi)容中,API版本號的信息通常是
Version
參數(shù)的值, 但也有些產(chǎn)品的API版本號為x-acs-version
參數(shù)的值。
當調(diào)用的API為RPC風格時(大部分阿里云產(chǎn)品API為RPC風格)如ECS和RDS,需要獲取Action
參數(shù),使用request.ApiName = "<Action>"
的方式來指定API名稱。
例如RunInstances-https://helpcdn.aliyun.com/document_detail/63440.html接口的Action為RunInstances
,在發(fā)起CommonRequest請求時,要使用request.ApiName = "RunInstances"
來指定API名稱。
當調(diào)用的API為RESTful風格時如容器服務(wù), 需要獲取PathPattern
參數(shù),使用request.PathPattern = "<PathPattern>"
的方式來指定RESTful路徑。
例如容器服務(wù)的查看所有集群實例-https://helpcdn.aliyun.com/document_detail/26053.html的API的PathPattern為/clusters
,在發(fā)起CommonRequest請求時,要使用request.PathPattern = "/clusters"
指定RESTful路徑。
以下代碼展示了如何使用CommonRequest的方式調(diào)用ECS的DescribeInstanceStatus-https://helpcdn.aliyun.com/document_detail/25505.html接口:
以下代碼展示了如何使用CommonRequest的方式調(diào)用容器服務(wù)的查看所有集群實例-https://helpcdn.aliyun.com/document_detail/26053.html接口:
直接使用阿里云賬號的主賬號的AccessKey ID和AccessKey Secret進行應(yīng)用開發(fā)會有一定的安全風險,為了提升安全性,除了通過RAM角色控制權(quán)限范圍外,您還可以使用為RAM角色簽發(fā)的STS Token來訪問阿里云服務(wù)。
使用STS Token調(diào)用SDK有以下優(yōu)點:
減少了主賬號AccessKey ID和AccessKey Secret泄露的風險,特別是移動設(shè)備等場景。
能使用靈活的權(quán)限控制,STS Token有一定的時間限制,并且根據(jù)RAM角色的靈活設(shè)置對ECS、SLB等資源的精細授權(quán)。
本文介紹如何使用STS Token來調(diào)用SDK訪問阿里云服務(wù),更多關(guān)于RAM和STS的信息,請參考RAM和STS介紹-https://helpcdn.aliyun.com/document_detail/27360.html。
注意: 在使用STS Token前,確保該產(chǎn)品支持STS Token驗證。詳情參見支持STS Token的產(chǎn)品-https://helpcdn.aliyun.com/document_detail/28630.html。
直接使用STS Token時,您需要自行維護STS Token的周期性更新。
其中:
region-id
是您正在使用的地域(可用區(qū))的ID,詳情參見地域列表-https://helpcdn.aliyun.com/document_detail/40654.html。
sts-access-key-id
sts-access-key-secret
sts-session-token
是通過STS的AssumeRole-https://helpcdn.aliyun.com/document_detail/28763.html請求返回的授權(quán)信息。
您可以通過指定RAM的角色信息,讓SDK幫您自動申請并維護STS Token。
其中:
role-arn
是角色全局資源描述符,您可以通過訪問RAM控制臺-https://ram.console.aliyun.com/role/list#/role/list,單擊角色名,進入詳情頁后查詢角色名對應(yīng)的role-arn
。
role-session-name
是臨時角色名稱,您可以通過調(diào)用AssumeRole-https://helpcdn.aliyun.com/document_detail/28763.html接口來獲取一個扮演該角色的臨時身份,創(chuàng)建成功后,便可以使用創(chuàng)建時的RoleSessionName
作為本方式的role-session-name
參數(shù)。
為了提高應(yīng)用部署的安全性的同時提升便利性,阿里云SDK支持通過實例元數(shù)據(jù)-https://helpcdn.aliyun.com/document_detail/49122.html服務(wù)來獲取ECS RAM角色的授權(quán)信息來訪問阿里云資源和服務(wù)。使用這種方式,您部署在ECS上的應(yīng)用程序,無需在SDK上配置授權(quán)信息即可訪問阿里云API(即不需要配置AccessKey),通過這種方式授權(quán)的SDK,可以擁有這個ECS RAM角色的權(quán)限。
注意:確保ECS實例已經(jīng)配置了RAM角色,詳情參見借助于實例RAM角色訪問其他云產(chǎn)品-https://helpcdn.aliyun.com/document_detail/54579.html。
其中:
role-name
是與ECS實例關(guān)聯(lián)的RAM角色名稱。
region-id
是您正在使用的地域的Region ID,詳情參見地域列表-https://helpcdn.aliyun.com/document_detail/40654.html。
注意:示例中的
region-id
是目標服務(wù)(且RAM角色有權(quán)訪問)的API所在Region,不一定等于這個ECS實例的Region ID。
5.錯誤處理
在使用阿里云Java SDK時,當服務(wù)端或者SDK端出錯時,SDK會返回相應(yīng)的異常信息。這些異常信息中會包含具體的錯誤信息,例如錯誤碼(Error Code)和錯誤消息(Error Message)。
一般情況下,您不需要對阿里云Java SDK返回的錯誤進行處理。您只需要根據(jù)服務(wù)端的錯誤提示處理服務(wù)端錯誤即可。
ServerException
是服務(wù)端錯誤信息。
ClientException
是SDK端錯誤信息。
例如,當出現(xiàn)如下錯誤時,您可以根據(jù)具體的錯誤信息,修改AccessKey的ID即可。
com.aliyuncs.exceptions.ClientException: InvalidAccessKeyId.NotFound : Specified access key is not found.如果您需要對SDK的錯誤進行處理,可以參考如下示例編寫代碼:
附錄:
創(chuàng)建AccessKey
訪問密鑰AccessKey(AK)相當于登錄密碼,只是使用場景不同。AccessKey用于程序方式調(diào)用云服務(wù)API,而登錄密碼用于登錄控制臺。如果您不需要調(diào)用API,那么就不需要創(chuàng)建AccessKey。
您可以使用AccessKey構(gòu)造一個API請求(或者使用云服務(wù)SDK)來操作資源。AccessKey包括AccessKeyId和AccessKeySecret。
AccessKeyId用于標識用戶。
AccessKeySecret是用來驗證用戶的密鑰。AccessKeySecret必須保密。
注意:禁止使用主賬號AK,因為主賬號AK泄露會威脅您所有資源的安全。請使用子賬號AK進行操作,可有效降低AK泄露的風險。
登錄RAM管理控制臺。
在左側(cè)導(dǎo)航欄,單擊用戶管理。
單擊目標用戶,進入用戶詳情頁面。
在用戶AccessKey區(qū)域,單擊創(chuàng)建AccessKey。
在彈出的對話框中,展開AccessKey詳情查看查看AcessKeyId和AccessKeySecret。然后單擊保存AK信息,下載AccessKey信息。
注意: 請您妥善保存AccessKey,謹防泄露。
|