为什么学习源码 ?
-
告别码农, 追求技术的本质, 不被框架花里胡哨的封装吓倒.
-
当感觉到自己对现在工作已经得心应手时, 想更进一层楼.真正读懂业务代码底层,
-
面试时能更好的吊打面试官,让企业对你垂涎三尺.
阿里云SDK 是什么?
阿里云SDK允许您通过编程访问阿里云服务,例如弹性计算服务(ECS),服务器负载平衡器(SLB)和CloudMonitor。您可以访问阿里云服务,而无需处理与API相关的任务,例如签名和构造请求。
为什么要学阿里云 SDK Core ?
-
阿里云 SDK Core 最低兼容 JDK1.6 , 项目中没有使用高版本语法糖, 代码逻辑相对简单, 学习门槛低.
-
阿里云SDK Core 包含了基础的设计模式, 以及 动态代理, 网络通讯, 日志集成等多项Java编程技巧.
-
阿里云在中国云服务器市场的份额最大, 所有的阿里云服务SDK 都依赖SDK Core, 源码含金量高.
-
阿里巴巴将制定了符合中国特色的Java开发规范, 学习它的源码等同于学习阿里Java开发规范.
学习SDK Core 第一步
阿里云SDK 基于 Maven 管理, 只需要你的电脑装有 Maven 并且 JDK 1.6 以上就可以运行所有阿里云 SDK项目.现在要做的是下载源码 (本文SDK基于 4.4.2).
https://developer.aliyun.com/tools/sdk?spm=a2c6h.13066369.0.0.7e254204vNmPv3#/java
看个 SDK Core Demo
以下代码示例显示了使用阿里云SDK for Java的三个主要步骤 (阿里云短信Demo) :
-
创建并初始化DefaultAcsClient实例。
-
创建一个API请求并设置参数。
-
发起请求并处理响应或异常。
package com.testprogram;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.http.HttpUtil;
import com.aliyuncs.profile.DefaultProfile;
public class Main {
public static void main(String[] args) {
// 1.创建并初始化`DefaultAcsClient`实例。
DefaultProfile profile = DefaultProfile.getProfile(
"<your-region-id>", // The region ID
"<your-access-key-id>", // The AccessKey ID of the RAM account
"<your-access-key-secret>"); // The AccessKey Secret of the RAM account
IAcsClient client = new DefaultAcsClient(profile);
// 2.创建一个API请求并设置参数。
CommonRequest request = new CommonRequest();
request.setSysProtocol(ProtocolType.HTTPS);
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("SignName", "xxxx告诉");
request.putQueryParameter("PhoneNumbers", 1329695482131);
request.putQueryParameter("TemplateCode", "SMS_1754303333");
/*
尊敬的${named},(先生/女士): 您好!感谢您使用XXXXX 平台的服务.
您的 ${orderId} 订单已完成. 为了提高我司的后续服务体验.诚邀您在闲暇时进入我司App 对本订单进行追评,
*/
request.putQueryParameter("TemplateParam", " {\"named\":\""+named+"\",\"orderId\":\""+orderId+"\"}");
// 3.发起请求并处理响应或异常。
try {
CommonResponse response = client.getCommonResponse(request);
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}
开启SDK Core Debug 开关 的两种方式
-
// 在最开始代码显示声明 HttpUtil.setIsHttpContentDebug(true); HttpUtil.setIsHttpDebug(true);
-
设置 环境变量 K = DEBUG V = sdk 具体原因为
请查看彩蛋第 30行.
查看SDK Core 核心DefaultAcsClient类UML图
Core Demo 前两步是 构建凭证对象, 填充请求对象, 第三步为 SDK 客户端 与 阿里云API资源交互, 为核心逻辑,让我们点进 DefaultAcsClient.getCommonResponse 源码一探究竟,
doAction 方法的参数列表, 请求对象, 请求失败是否重试, 最多重试次数, 客户端凭证.
组装关键参数ing,完事进入重头戏!
集合一切客户端的参数,并完成对称加密 Boby, 重头戏!
代理模式获取最终的RPC客户端来发送封装的信息,抛砖引玉到这. 最后一个彩蛋自己研究, 防止读者成为博客大神….
使用CommonRequest进行调用_使用手册_Java SDK-阿里云helpcdn.aliyun.com
微信扫描二维码,关注我的公众号
深入浅出分享 Java 干货 , 找回对代码的 Passion , 助力月入 20K+