开发SDK的使用教程【面试+工作】

开发SDK的使用教程【面试+工作】

最近很多人反映工作中SDK不会用,

这个说实话不是个难点,只是你不敢操作。

下面以TFS使用和阿里SDK做教程


TFS SDK使用

一、下载必要的软件

- Eclipse安装程序 http://www.eclipse.org/

- JDK http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html

二、创建Java项目,并导入TFS SDK

在Java项目中创建目录tfssdk,并将SDK中的文件复制到该目录下;将SDK中的文档做成zip文档,并复制到tfssdk目录下(tfs-sdk-11.0-javadoc.zip)

打开项目属性

添加JAR,并配置库位置和文档位置

三、创建并运行样例代码

添加一个样例代码:创建要求工作项

运行代码,成功


阿里云 SDK使用

一.快速开始

欢迎使用阿里云开发者工具套件(SDK)。阿里云Java SDK让您不用复杂编程即可访问云服务器、云监控等多个阿里云服务。这里向您介绍如何获取阿里云Java SDK并开始调用。

1.环境准备

  1. 要使用阿里云Java SDK,您需要一个RAM账号以及一对AccessKey IDAccessKey Secret。 请在阿里云控制台中的AccessKey管理页面上创建和查看您的AccessKey,或联系您的系统管理员。
  2. 要使用阿里云SDK访问某个产品的API,您需要事先在阿里云控制台中开通这个产品。
  3. 阿里云Java SDK需要1.6以上的JDK。

2.安装SDK

如果您使用Apache Maven来管理Java项目,只需在项目的pom.xml文件加入相应的依赖项即可。您可以在阿里云SDK频道中下载各云产品的Maven依赖。

无论您要使用哪个产品的开发工具包,都必须安装SDK核心库。比如,对云服务器ECS的SDK调用,您需要安装SDK核心库和云服务器ECS的SDK。

以3.5.0版本的SDK核心库和3.0.0版本的ECS SDK为例,您只需在pom.xml中声明这两个开发工具包,如下所示:

3.使用Java SDK

以下这个代码示例向您展示了调用阿里云Java SDK的3个主要步骤:

  1. 创建DefaultAcsClient实例并初始化。
  2. 创建API请求并设置参数。
  3. 发起请求并处理应答或异常。

二、使用手册


1.使用Java SDK

1.1安装

阿里云Java SDK支持1.6及以上版本的JDK,提供以下两种安装方式:

  • 1.1.1使用Maven(推荐) 如果您使用了Maven管理依赖,您可以通过向pom.xml中添加以下代码来安装阿里云Java SDK。
  • 1.1.2在集成开发环境(IDE)中导入JAR文件 注意: 该安装方式会在下个主版本中被废弃,届时将仅支持通过Maven安装SDK。 无论您使用Eclipse还是IntelliJ作为集成开发环境,都可以通过导入JAR文件的方式安装阿里云Java SDK。您可以在阿里云开发工具包(SDK)中下载各云产品的JAR文件。 1.1.3Eclipse 完成以下操作,在Eclipse的项目中安装阿里云Java SDK:
  • 1.1.3.1将下载的aliyun-java-sdk-XXX.jar文件复制到您的项目文件夹中。
  • 1.1.3.2在Eclipse中打开您的项目,右键单击该项目,单击Properties。
  • 1.1.3.3在弹出的对话框中,单击Java Build Path > Libraries > Add JARs,添加下载的JAR文件。

1.1.3.4单击Apply and Close。 1.1.4IntelliJ 完成以下操作,在IntelliJ的项目中安装阿里云Java SDK:

  • 1.1.4.1将下载的aliyun-java-sdk-XXX.jar文件复制到您的项目文件夹中。
  • 1.1.4.2在IntelliJ中打开您的项目,在菜单栏中单击File > Project Structure。
  • 1.1.4.3在弹出的对话框中,单击Modules > Dependencies。在出现的列表中单击add > JARs or directories,选择要添加的JAR文件。
  • 1.1.4.4单击Apply,然后单击OK。

1.2设置身份验证凭据

当使用阿里云SDK访问阿里云服务时,您需要提供阿里云账号进行身份验证。

目前,Java SDK支持以下几种身份验证方式:

验证方式

说明

AccessKey

使用AccessKey ID和AccessKey Secret访问

StsToken

使用STS Token访问

RamRoleArn

使用RAM子账号的AssumeRole方式访问

EcsRamRole

在ECS实例上通过EcsRamRole实现免密验证

RsaKeyPair

使用RSA公私钥方式(仅日本站支持)

本文以AccessKey为例说明如何设置凭据。为了保证您的账号安全,建议您使用RAM账号来访问阿里云服务。阿里云账号的AccessKey对拥有的资源有完全的权限。RAM账号由阿里云账号授权创建,仅有对特定资源限定的操作权限。看最下面附录:创建AccessKey获取RAM账号的AccessKey。

使用AccessKey作为访问凭据,需要在初始化Client时设置凭证。

注意:确保包含AccessKey的代码不会泄漏(例如提交到外部公开的GitHub项目),否则将会危害您的阿里云账号的信息安全。

1.3发起调用

本文以ECS为例,介绍如何使用阿里云Java SDK发起请求。

1.3.1新建一个AcsClient。

1.3.2创建请求。

  1. 请求类的命名规范为${apiName}Request,其中
  2. ${apiName}为API名称,例如DescribeInstances。
  3. 在引入多个产品SDK时,有可能存在Request类同名的情况,请注意按照package区分。
  1. 发起调用并处理应答。
  1. 正常情况下,应答中的所有字段,都会被反序列化到response中,您可以直接调用response.getXXX()来获得应答中的字段。
  1. 如果出现了异常,或您需要原始HTTP应答的情况下,您可以通过以使用doAction()来获取原始应答。

2.使用CommonRequest进行调用

2.1CommonRequest调用方式

当您要访问的API没有产品SDK提供时,可以采用泛用型的API调用方式(CommonRequest)。使用CommonRequest调用方式可实现任意OpenAPI接口的调用。

CommonRequest有如下特点:

  1. 轻量:只需Core包即可发起调用,无需下载安装各产品的SDK。
  2. 简便:无需更新SDK即可调用最新发布的API。
  3. 快速迭代。

2.2使用CommonRequest

阿里云产品的API有RPC和RESTful两种风格,不同风格的API的CommonRequest的调用方法也不同。

通常API参数中包含Action参数的是RPC风格,包含PathPattern参数的是RESTful风格。一般情况下,每个产品内,所有API的调用风格是统一的。每个API仅支持特定的一种风格调用,传入错误的标识,可能会调用到其他API,或收到ApiNotFound的错误信息。

发起一次CommonRequest请求,您需要获取以下几个参数的值。您可以在文档中心-https://help.aliyun.com/各产品的API文档中获取以下参数的值。此外,部分产品也可以通过OpenAPI Explorer-https://api.aliyun.com/来获取API的参数信息。

  • 域名(domain):该产品的通用访问域名。
  • API版本(version):该API的版本号,格式为YYYY-MM-DD。 说明:在”公共参数”内容中,API版本号的信息通常是Version参数的值, 但也有些产品的API版本号为x-acs-version参数的值。
  • 当调用的API为RPC风格时(大部分阿里云产品API为RPC风格)如ECS和RDS,需要获取Action参数,使用request.ApiName = "<Action>"的方式来指定API名称。 例如RunInstances-https://helpcdn.aliyun.com/document_detail/63440.html接口的Action为RunInstances,在发起CommonRequest请求时,要使用request.ApiName = "RunInstances"来指定API名称。
  • 当调用的API为RESTful风格时如容器服务, 需要获取PathPattern参数,使用request.PathPattern = "<PathPattern>"的方式来指定RESTful路径。 例如容器服务的查看所有集群实例-https://helpcdn.aliyun.com/document_detail/26053.html的API的PathPattern为/clusters,在发起CommonRequest请求时,要使用request.PathPattern = "/clusters"指定RESTful路径。

2.3代码示例

2.3.1调用RPC风格的API

以下代码展示了如何使用CommonRequest的方式调用ECS的DescribeInstanceStatus-https://helpcdn.aliyun.com/document_detail/25505.html接口:

2.3.2调用RESTful风格的API

以下代码展示了如何使用CommonRequest的方式调用容器服务的查看所有集群实例-https://helpcdn.aliyun.com/document_detail/26053.html接口:


3.使用STS Token作为用户凭据

直接使用阿里云账号的主账号的AccessKey ID和AccessKey Secret进行应用开发会有一定的安全风险,为了提升安全性,除了通过RAM角色控制权限范围外,您还可以使用为RAM角色签发的STS Token来访问阿里云服务。

使用STS Token调用SDK有以下优点:

  • 减少了主账号AccessKey ID和AccessKey Secret泄露的风险,特别是移动设备等场景。
  • 能使用灵活的权限控制,STS Token有一定的时间限制,并且根据RAM角色的灵活设置对ECS、SLB等资源的精细授权。

本文介绍如何使用STS Token来调用SDK访问阿里云服务,更多关于RAM和STS的信息,请参考RAM和STS介绍-https://helpcdn.aliyun.com/document_detail/27360.html。

注意: 在使用STS Token前,确保该产品支持STS Token验证。详情参见支持STS Token的产品-https://helpcdn.aliyun.com/document_detail/28630.html。

3.1方式一:直接使用STS Token

直接使用STS Token时,您需要自行维护STS Token的周期性更新。

其中:

  • region-id是您正在使用的地域(可用区)的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请求返回的授权信息。

3.2方式二:使用SDK自动管理STS Token的周期

您可以通过指定RAM的角色信息,让SDK帮您自动申请并维护STS Token。

其中:

  • role-arn是角色全局资源描述符,您可以通过访问RAM控制台-https://ram.console.aliyun.com/role/list#/role/list,单击角色名,进入详情页后查询角色名对应的role-arn
  • role-session-name是临时角色名称,您可以通过调用AssumeRole-https://helpcdn.aliyun.com/document_detail/28763.html接口来获取一个扮演该角色的临时身份,创建成功后,便可以使用创建时的RoleSessionName作为本方式的role-session-name参数。

4.配置RamRole实现在ECS实例上的“无AK访问”

为了提高应用部署的安全性的同时提升便利性,阿里云SDK支持通过实例元数据-https://helpcdn.aliyun.com/document_detail/49122.html服务来获取ECS RAM角色的授权信息来访问阿里云资源和服务。使用这种方式,您部署在ECS上的应用程序,无需在SDK上配置授权信息即可访问阿里云API(即不需要配置AccessKey),通过这种方式授权的SDK,可以拥有这个ECS RAM角色的权限。

注意:确保ECS实例已经配置了RAM角色,详情参见借助于实例RAM角色访问其他云产品-https://helpcdn.aliyun.com/document_detail/54579.html。

4.1代码示例

其中:

  • role-name是与ECS实例关联的RAM角色名称。
  • region-id是您正在使用的地域的Region ID,详情参见地域列表-https://helpcdn.aliyun.com/document_detail/40654.html。

注意:示例中的region-id是目标服务(且RAM角色有权访问)的API所在Region,不一定等于这个ECS实例的Region ID。


5.错误处理

在使用阿里云Java SDK时,当服务端或者SDK端出错时,SDK会返回相应的异常信息。这些异常信息中会包含具体的错误信息,例如错误码(Error Code)和错误消息(Error Message)。

一般情况下,您不需要对阿里云Java SDK返回的错误进行处理。您只需要根据服务端的错误提示处理服务端错误即可。

  • ServerException是服务端错误信息。
  • ClientException是SDK端错误信息。

例如,当出现如下错误时,您可以根据具体的错误信息,修改AccessKey的ID即可。

com.aliyuncs.exceptions.ClientException: InvalidAccessKeyId.NotFound : Specified access key is not found.

如果您需要对SDK的错误进行处理,可以参考如下示例编写代码:


附录:

创建AccessKey

访问密钥AccessKey(AK)相当于登录密码,只是使用场景不同。AccessKey用于程序方式调用云服务API,而登录密码用于登录控制台。如果您不需要调用API,那么就不需要创建AccessKey。

您可以使用AccessKey构造一个API请求(或者使用云服务SDK)来操作资源。AccessKey包括AccessKeyId和AccessKeySecret。

  • AccessKeyId用于标识用户。
  • AccessKeySecret是用来验证用户的密钥。AccessKeySecret必须保密。

注意:禁止使用主账号AK,因为主账号AK泄露会威胁您所有资源的安全。请使用子账号AK进行操作,可有效降低AK泄露的风险。

操作步骤

  1. 登录RAM管理控制台。
  2. 在左侧导航栏,单击用户管理。
  3. 单击目标用户,进入用户详情页面。
  4. 在用户AccessKey区域,单击创建AccessKey。
  5. 在弹出的对话框中,展开AccessKey详情查看查看AcessKeyId和AccessKeySecret。然后单击保存AK信息,下载AccessKey信息。 注意: 请您妥善保存AccessKey,谨防泄露。

原文发布于微信公众号 - Java帮帮(javahelp)

原文发表时间:2018-04-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java工程师日常干货

实现一个迷你版的RPC前言动手实现RPC

在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者B负责),那么开发者B会和A约定调用API,以接口的形式提供给A。通常都是B把API上...

743
来自专栏刘望舒

Android系统架构与系统源码目录

前言 技术博客终于可以恢复正常的更新速度了,原因是我编写的进阶书籍的初稿已经完成,窃以为它将会是Android应用书籍中最有深度的一本,可以说是《Android...

2248
来自专栏ChaMd5安全团队

文件上传漏洞的一些总结

0x00 前言 在跟p猫的py交易后,写下了这篇文章,根据之前写文章后表哥给予的一些改进建议,尽量在这篇文章中写得更加详细。因为本人技术水平有限菜的要死,所以...

3506
来自专栏Elson的web征途

【译】开始在web使用JS Modules

原文说的JS modules,实际上指的是ES6的模块化特性,通过<script type="module">可以实现不经过打包直接在浏览器中import/ex...

2447
来自专栏林德熙的博客

使用 RetroShare 分享资源 下载安装注册添加好友分享文件搜索资源获得资源

本文告诉大家如何使用 RetroShare 来分享资源。因为 RetroShare 是一个 p2p 分享的工具,所以他比现在很多云盘都好用,在网上,很多大神说可...

1021
来自专栏涤生的博客

服务框架之注册中心,你不知道的内幕

前一篇服务框架技术栈粗略分析了服务框架需要的各个核心模块,首先提到的就是注册中心,注册中心实现了服务注册和发现的功能,在服务框架中也发挥着重要的作用。今天主要围...

772
来自专栏云端架构

【云端架构】网站遇到问题官方文档看不懂临时排查引导

网站遇到问题第一反应是查源站其次找官方文档,若文档找不到再去提工单最后实在解决不了才会打400电话找攻城狮。今天和大家分享的是如何自检自查,因为官方文档存在缺陷...

5027
来自专栏竹清助手

Laravel 5 系列入门教程(一)【最适合中国人的 Laravel 教程】

2. http://www.golaravel.com/laravel/docs/5.0/

1182
来自专栏aoho求索

Redis Cluster深入与实践(续)

前文回顾 上一篇文章基于redis的分布式锁实现写了基于redis实现的分布式锁。分布式环境下,不会还使用单点的redis,做到高可用和容灾,起码也是redi...

3547
来自专栏石瞳禅的互联网实验室

在Go中对gRPC+ProtoBuf与Http+Json进行基准测试

服务之间通信的最简单的解决方案是使用JSON over HTTP。尽管JSON具有许多明显的优点(比如它具有很好的可读性,易于理解,且通常性能良好),但它还是有...

711

扫码关注云+社区