AWS API Gateway 的Android SDK.docx
- 文档编号:12303705
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:16
- 大小:243.84KB
AWS API Gateway 的Android SDK.docx
《AWS API Gateway 的Android SDK.docx》由会员分享,可在线阅读,更多相关《AWS API Gateway 的Android SDK.docx(16页珍藏版)》请在冰豆网上搜索。
AWSAPIGateway的AndroidSDK
APIGateway的AndroidSDK
1.背景介绍
AmazonAPIGateway是一种完全托管的服务,可以帮助开发者轻松创建、发布、维护、监控和保护任意规模的API。
作为无服务器架构中的一个重要组成部分,已经有越来越多的用户熟悉并使用AmazonAPIGateway。
为了让大家更轻松地调用生成的API,AmazonAPIGateway还提供了生成客户端SDK的功能,目前支持的客户端语言包括Java、JavaScript、iOS(Object-C)、iOS(Swift)和Android。
今天,我们通过一个具体的例子演示一下AndroidSDK,帮助大家快速上手,更方便轻松地使用AmazonAPIGateway。
2.配置部署API
我们参考官方文档中的宠物店这个例子,配置一套代理HTTP接口的API。
我们简化接口定义,以便突出AndroidSDK的使用,只做2个接口:
/pets
方法:
GET
参数:
typeString宠物类型
pageint页码
/pets/{id}
方法:
GET
参数:
无
2.1创建Model
我们的API代理的后端接口还是这个宠物店的接口
http:
//petstore-demo-endpoint.execute-
我们先根据其返回结果创建相关的结果数据模型。
我们以Oregon区域为例,打开AmazonAPIGateway管理控制台
https:
//us-west-
点击CreateAPI
保持NewAPI选中不变。
APIname填写petstore。
Description填写AdemoAPIforAndroidSDK.。
点击CreateAPI按钮。
这时左侧导航链接会显示成APIs>petstore>Resources。
点击导航链接中的APIs>petstore>Models。
这里已经显示有2个默认创建出来的Model。
我们点击Create按钮再来创建一个。
2.1.1Pets:
宠物列表的Model
Modelname*填写Pets
Contenttype*填写application/json
Modeldescription填写Alistofpets。
我们使用schema。
RootID填写pets。
我们直接访问http:
//petstore-demo-endpoint.execute-
把得到的返回结果
[
{
"id":
1,
"type":
"dog",
"price":
249.99
},
{
"id":
2,
"type":
"cat",
"price":
124.99
},
{
"id":
3,
"type":
"fish",
"price":
0.99
}
]
帖到JSON栏中,其它选项保持不变,点击GenerateSchema按钮,结果生成在右侧的窗格中。
复制出来,粘贴到Modelschema格中即可。
点击CreatModel按钮保存完成。
2.1.2Pet:
宠物详情接口的Model
点击Create按钮再来创建一个。
Modelname*填写Pet。
Contenttype*填写application/json。
Modeldescription填写Apet。
我们再使用schema。
RootID填写pet。
我们直接访问http:
//petstore-demo-endpoint.execute-
把得到的返回结果
{
"id":
1,
"type":
"dog",
"price":
249.99
}
帖到JSON栏中,其它选项保持不变,点击GenerateSchema按钮,结果生成在右侧的窗格中。
复制出来,粘贴到Modelschema格中。
点击CreatModel按钮保存完成。
2.2配置API
2.2.1宠物列表接口
左侧导航链接点击APIs>petstore>Resources。
保持最顶层的/为选中状态时,点击Actions下拉菜单,选择CreateResource。
ResourceName*填写pets
ResourcePath自动填写了pets。
然后点击CreateResource按钮。
这时刚刚创建的/pets应该是选中状态,再点击Actions下拉菜单,选择CreateMethod,在当时出现的方法菜单里选择GET,然后点后面的对号符确定。
然后在/pets-GET-Setup页,Integrationtype选HTTP。
EndpointURL填写http:
//petstore-demo-endpoint.execute-
其它保持默认,点击Save按钮。
创建成功后,点击MethodRequest链接,在MethodRequest配置页,点击URLQueryStringParameters展开之。
点击Addquerystring增加一个参数type,点击Addquerystring增加第二个参数page。
其它项保持默认。
点击MethodExecution链接返回,点击MethodResponse链接。
在MethodResponse配置页,点击200左边的三角形,展开响应详情。
在ResponseBodyfor200下点击铅笔图标编辑之,把Model菜单下选择Pets,然后点击对勾图标保存。
点击MethodExecution链接返回,点击TEST链接,我们来测试一下。
QueryStrings下面type输入dog,page输入1,然后点击Test按钮。
右侧会显示出形如如下结果,表示这个API已经配置成功。
Request:
/pets?
type=dog&page=1
Status:
200
Latency:
271ms
ResponseBody
[
{
"id":
1,
"type":
"dog",
"price":
249.99
},
{
"id":
2,
"type":
"dog",
"price":
124.99
},
{
"id":
3,
"type":
"dog",
"price":
0.99
}
]
2.2.1宠物详情接口
左侧导航链接点击APIs>petstore>Resources。
保持最顶层的/pets为选中状态时,点击Actions下拉菜单,选择CreateResource。
ResourceName*填写{petId}
ResourcePath自动填写了–petid-,把它删掉,改成{petId}。
然后点击CreateResource按钮。
这时刚刚创建的/{petId}应该是选中状态,再点击Actions下拉菜单,选择CreateMethod,在当时出现的方法菜单里选择GET,然后点后面的对号符确定。
然后在/pets/{petId}-GET-Setup页,Integrationtype选HTTP。
EndpointURL填写http:
//petstore-demo-endpoint.execute-
其它保持默认,点击Save按钮。
创建成功后,点击MethodRequest链接,在MethodRequest配置页,点击RequestPaths展开之,确认这里已经有一条petId了。
如果没有,请返回CreateResource步骤检查。
点击MethodExecution链接返回,点击MethodResponse链接。
在MethodResponse配置页,点击200左边的三角形,展开响应详情。
在ResponseBodyfor200下点击铅笔图标编辑之,把Model菜单下选择Pet,然后点击对勾图标保存。
点击MethodExecution链接返回,点击TEST链接,我们来测试一下。
QueryStrings下面{petId}输入1,然后点击Test按钮。
右侧会显示出如下结果,表示这个API已经配置成功。
Request:
/pets/1
Status:
200
Latency:
357ms
ResponseBody
{
"id":
1,
"type":
"dog",
"price":
249.99
}
2.3部署API并生成SDK
2.3.1部署API
左侧导航链接点击APIs>petstore>Resources,Action菜单点击DeployAPI,在弹出层里
Deploymentstage菜单下拉选[NewStage]。
Stagename*填写test。
Stagedescription填写teststage。
Deploymentdescription填写firstdeploy。
点击Deploy按钮。
部署成功后会跳转到testStageEditor。
可以看到
InvokeURL:
形如https:
//abcde12345.execute-api.us-west-
我们把这个URL后面接上前述配置过的API路径,再来测试一下。
因为我们配置的没有AUTH难,所以可以简单的使用游览器直接访问,比如
https:
//abcde12345.execute-api.us-west-
可以得到宠物列表的JSON结果就表示部署成功了。
同理可以再测试一下
https:
//abcde12345.execute-api.us-west-
2.3.1生成SDK
在testStageEditor页点击SDKGeneration选项卡,Platform*选Android。
下面展开的内容,都和我们即将开发的AndroidApp包名有关,我们先定好包名为com.example.petstore。
相应的这里几项这样填写:
GroupID填写com.example
Invokerpackage填写完整包名com.example.petstore
ArtifactID填写petstore
Artifactversion填写自己编排的版本号,比如1.0.0
然后点击GenerateSDK按钮,弹出下载文件对话框,保存到本机即可。
这是一个ZIP压缩包,解压可以得到以下目录和文件。
│build.gradle
│LICENSE.txt
│NOTICE.txt
│pom.xml
│README.md
└─src
└─main
└─java
└─com
└─example
└─petstore
│PetstoreClient.java
└─model
Pet.java
Pets.java
PetsItem.java
先放在这备用。
下面我们用AndroidStudio开始做App项目。
3.Android开发整合SDK
3.1创建一个新的Android项目
我们打开AndroidStudio,新建一个项目,Applicationname填写Petstore,Companydomain填写,从而Packagename成为com.example.petstore,和我们前面生成SDK时使用的包名保持一致。
然后一路点击Next,使用默认配置(EmptyActivity,ActivityName是MainActivity,LayoutName是activity_main)创建一个项目。
3.2整合APIGateway生成的AndroidSDK
使用APIGateway生成的SDK其实有官方文档:
但是我们今天用更简便的方法,直接用build.gradle管理包,不需要按官方文档那样安装Maven再编译等。
项目创建起来后,我们在Project面板启用Project视图。
打开app/build.gradle,在dependencies段添加以下几行,其实就是AWSSDK的核心包,APIGateway的包以及用于解析JSON的gson包。
compile'com.amazonaws:
aws-android-sdk-core:
2.4.+'
compile"com.amazonaws:
aws-android-sdk-apigateway-core:
2.4+"
compile'com.google.code.gson:
gson:
2.8.0'
然后按提示点击Syncnow同步项目。
这时会下载上述3个依赖库,视网络状态可能需要一些时间。
我们可以不用等待,继续后面的配置。
添加访问互联网权限,打开/app/src/main/AndroidManifest.xml,在 name="android.permission.INTERNET"/> 我们打开之前下载的SDK压缩包解压的目录src/main/java/com/example/petstore,把下面的文件和目录 │PetstoreClient.java └─model Pet.java Pets.java PetsItem.java 复制到Android项目中com.example.petstore下面。 完成的样子如下图所示: 3.3编写代码用SDK实现调用API 我们使用Cognito进行验证,所以需要先创建一个Cognito的Federatedidentitypool,有关方法请参阅相关文档,这里不再赘述。 在AndroidStudio里打开MainActivity.java。 先定义2个常量 publicstaticfinalStringTAG="petstore_MainActivity"; publicstaticfinalStringCOGNITO_POOL_ID="us-west-2: xxxxxxxx"; 然后我们定义一个testPet()方法。 privatevoidtestPet(){ //使用Cognito进行验证 AWSCredentialsProvidercredentialsProvider=newCognitoCachingCredentialsProvider( getApplicationContext(),//当前活动的Context COGNITO_POOL_ID,//Cognitoidentitypoolid //TODO把这个区域设置成你的Cognito所在的区域 Regions.US_WEST_2 ); //使用ApiClientFactory工厂方法来生成SDK的客户端实例。 ApiClientFactoryfactory=newApiClientFactory().credentialsProvider(credentialsProvider); PetstoreClientclient=factory.build(PetstoreClient.class); //对API接口的调用已经封装成相应的方法,比如/pets接口的GET方法,对应petsGet()方法。 //具体的方法说明可以点击petsGet方法名上的链接,跳转到PetstoreClient.java中查看源码。 Petspets=client.petsGet("dog","1"); //列表中的每个项目可以用get()方法获取 PetsItemitem=pets.get(0); //我们这里只使用Log.d()方法打印出日志信息。 Log.d(TAG,"oneiteminpetlist: id="+item.getId()+",type="+item.getType()+",price="+item.getPrice()); //调用详情接口 StringpetId="2"; Petpet=client.petsPetIdGet(petId); finalStringmessage="pet: id="+pet.getId()+",type="+pet.getType()+",price="+pet.getPrice(); //用弹出层演示在界面展示数据 runOnUiThread(newRunnable(){ @Override publicvoidrun(){ newAlertDialog.Builder(self) .setTitle("Pet") .setMessage(message) .setPositiveButton(android.R.string.ok,null) .create() .show(); } }); } 最后在onCreate()方法里加上如下代码,新开线程做HTTP请求,就可以了。 newThread(){ @Override publicvoidrun(){ super.run(); testPet(); } }.start(); 到这里例子已经完成,我们运行一个App,顺利地话可以看到如下的日志输出,我们已经可以顺利得到API接口的响应结果了。 这是在模拟器上运行的弹出层效果的截图。 例子的源码在下面git库的Petstore目录,供大家参考。 使用时请记得把MainActivity.java里的COGNITO_POOL_ID换成你自己真实的值,以及newCognitoCachingCredentialsProvider时要使用你的COGNITO_POOL_ID所在的region值。 4.小结 AmazonAPIGateway生成的客户端SDK主要功能包括以下几点: ∙根据我们为各个接口定义的Model批量创建好相应的Model类。 ∙通过AWS核心SDK实现HTTP请求的验证。 ∙封装HTTP请求和响应。 ∙把响应结果通过Gson库转换成方便AndroidJava使用的Model类。 这个简单的例子也体现出生成的客户端SDK便利了客户端应用程序的开发。 作者介绍: 薛峰,亚马逊AWS解决方案架构师,AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内和全球的应用和推广,在大规模并发应用架构、移动应用以及无服务器架构等方面有丰富的实践经验。 在加入AWS之前曾长期从事互联网应用开发,先后在新浪、唯品会等公司担任架构师、技术总监等职位。 对跨平台多终端的互联网应用架构和方案有深入的研究。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AWS API Gateway 的Android SDK Android