写点什么

API Gateway 的 Android SDK

  • 2019-11-14
  • 本文字数:7601 字

    阅读完需:约 25 分钟

API Gateway 的Android SDK

1. 背景介绍

Amazon API Gateway 是一种完全托管的服务,可以帮助开发者轻松创建、发布、维护、监控和保护任意规模的 API。作为无服务器架构中的一个重要组成部分,已经有越来越多的用户熟悉并使用 Amazon API Gateway。为了让大家更轻松地调用生成的 API,Amazon API Gateway 还提供了生成客户端 SDK 的功能,目前支持的客户端语言包括 Java、JavaScript、iOS(Object-C)、iOS(Swift) 和 Android。


今天,我们通过一个具体的例子演示一下 Android SDK,帮助大家快速上手,更方便轻松地使用 Amazon API Gateway。

2. 配置部署 API

我们参考官方文档中的宠物店这个例子,配置一套代理 HTTP 接口的 API。我们简化接口定义,以便突出 Android SDK 的使用,只做 2 个接口:


/pets


方法: GET


参数:


type String 宠物类型


page int 页码


/pets/{id}


方法: GET


参数: 无

2.1 创建 Model

我们的 API 代理的后端接口还是这个宠物店的接口


http://petstore-demo-endpoint.execute-api.com/petstore/pets


我们先根据其返回结果创建相关的结果数据模型。


我们以 Oregon 区域为例,打开 Amazon API Gateway 管理控制台


https://us-west-2.console.aws.amazon.com/apigateway/home?region=us-west-2


点击 Create API


保持 New API 选中不变。


API name 填写 petstore。


Description 填写 A demo API for Android SDK.。点击 Create API 按钮。


这时左侧导航链接会显示成 APIs > petstore> Resources。点击导航链接中的 APIs > petstore> Models。这里已经显示有 2 个默认创建出来的 Model。我们点击 Create 按钮再来创建一个。


2.1.1 Pets: 宠物列表的 Model


Model name* 填写 Pets


Content type* 填写 application/json


Model description 填写 A list of pets。


我们使用https://jsonschema.net/ 这个在线工具来生成 Model schema。


Root ID 填写 pets。


我们直接访问 http://petstore-demo-endpoint.execute-api.com/petstore/pets


[


{


"id": 1,


"type": "dog",


"price": 249.99


},


{


"id": 2,


"type": "cat",


"price": 124.99


},


{


"id": 3,


"type": "fish",


"price": 0.99


}


]


帖到 JSON 栏中,其它选项保持不变,点击 Generate Schema 按钮,结果生成在右侧的窗格中。



复制出来,粘贴到 Model schema 格中即可。点击 Creat Model 按钮保存完成。


2.1.2 Pet: 宠物详情接口的 Model


点击 Create 按钮再来创建一个。


Model name* 填写 Pet。


Content type* 填写 application/json。


Model description 填写 A pet。


我们再使用https://jsonschema.net/ 这个在线工具来生成 Model schema。


Root ID 填写 pet。


我们直接访问http://petstore-demo-endpoint.execute-api.com/petstore/pets/1


把得到的返回结果


{


"id": 1,


"type":


"dog",


"price":249.99


}


帖到 JSON 栏中,其它选项保持不变,点击 Generate Schema 按钮,结果生成在右侧的窗格中。复制出来,粘贴到 Model schema 格中。点击 Creat Model 按钮保存完成。

2.2 配置 API

2.2.1 宠物列表接口


左侧导航链接点击 APIs > petstore> Resources。保持最顶层的 / 为选中状态时,点击 Actions 下拉菜单,选择 Create Resource。


Resource Name* 填写 pets


Resource Path 自动填写了 pets。然后点击 Create Resource 按钮。


这时刚刚创建的/pets 应该是选中状态,再点击 Actions 下拉菜单,选择 Create Method,在当时出现的方法菜单里选择 GET,然后点后面的对号符确定。


然后在/pets – GET – Setup 页,Integration type 选 HTTP。


Endpoint URL 填写 http://petstore-demo-endpoint.execute-api.com/petstore/pets。


其它保持默认,点击 Save 按钮。


创建成功后,点击 Method Request 链接,在 Method Request 配置页,点击 URL Query String Parameters 展开之。


点击 Add query string 增加一个参数 type ,点击 Add query string 增加第二个参数 page。其它项保持默认。


点击 Method Execution 链接返回,点击 Method Response 链接。在 Method Response 配置页,点击 200 左边的三角形,展开响应详情。在 Response Body for 200 下点击铅笔图标编辑之,把 Model 菜单下选择 Pets,然后点击对勾图标保存。



点击 Method Execution 链接返回,点击 TEST 链接,我们来测试一下。Query Strings 下面 type 输入 dog,page 输入 1,然后点击 Test 按钮。右侧会显示出形如如下结果,表示这个 API 已经配置成功。


Request: /pets?type=dog&page=1


Status: 200


Latency: 271 ms


Response Body


[


{


"id": 1,


"type": "dog",


"price": 249.99


},


{


"id": 2,


"type": "dog",


"price": 124.99


},


{


"id": 3,


"type": "dog",


"price": 0.99


}


]


2.2.2 宠物详情接口


左侧导航链接点击 APIs > petstore> Resources。保持最顶层的 /pets 为选中状态时,点击 Actions 下拉菜单,选择 Create Resource。


Resource Name* 填写{petId}


Resource Path 自动填写了 –petid-,把它删掉,改成{petId}。然后点击 Create Resource 按钮。


这时刚刚创建的/{petId}应该是选中状态,再点击 Actions 下拉菜单,选择 Create Method,在当时出现的方法菜单里选择 GET,然后点后面的对号符确定。


然后在/pets/{petId} – GET – Setup 页,Integration type 选 HTTP。


Endpoint URL 填写 http://petstore-demo-endpoint.execute-api.com/petstore/pets/{petId}。


其它保持默认,点击 Save 按钮。


创建成功后,点击 Method Request 链接,在 Method Request 配置页,点击 Request Paths 展开之,确认这里已经有一条 petId 了。如果没有,请返回 Create Resource 步骤检查。


点击 Method Execution 链接返回,点击 Method Response 链接。在 Method Response 配置页,点击 200 左边的三角形,展开响应详情。在 Response Body for 200 下点击铅笔图标编辑之,把 Model 菜单下选择 Pet,然后点击对勾图标保存。


点击 Method Execution 链接返回,点击 TEST 链接,我们来测试一下。Query Strings 下面{petId}输入 1,然后点击 Test 按钮。右侧会显示出如下结果,表示这个 API 已经配置成功。


Request: /pets/1


Status: 200


Latency: 357 ms


Response


Body


{


"id": 1,


"type": "dog",


"price": 249.99


`}



**2.3.1 部署API**
左侧导航链接点击 APIs > petstore> Resources,Action 菜单点击 Deploy API,在弹出层里
Deployment stage 菜单下拉选 [New Stage]。
Stage name*填写 test。
Stage description 填写 test stage。
Deployment description 填写 first deploy。
点击 Deploy 按钮。部署成功后会跳转到test Stage Editor。可以看到
Invoke URL: 形如 https://abcde12345.execute-api.us-west-2.amazonaws.com/test
我们把这个 URL 后面接上前述配置过的API路径,再来测试一下。因为我们配置的没有AUTH难,所以可以简单的使用游览器直接访问,比如
https://abcde12345.execute-api.us-west-2.amazonaws.com/test/pets
可以得到宠物列表的JSON结果就表示部署成功了。同理可以再测试一下
https://abcde12345.execute-api.us-west-2.amazonaws.com/test/pets/1
**2.3.1 生成SDK**
在test Stage Editor页点击SDK Generation选项卡,Platform* 选Android。下面展开的内容,都和我们即将开发的Android App 包名有关,我们先定好包名为 com.example.petstore。相应的这里几项这样填写:
Group ID 填写com.example
Invoker package 填写完整包名com.example.petstore
Artifact ID 填写petstore
Artifact version 填写自己编排的版本号,比如1.0.0
然后点击Generate SDK按钮,弹出下载文件对话框,保存到本机即可。
这是一个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
先放在这备用。下面我们用 Android Studio 开始做 App 项目。
### 3. Android 开发整合SDK
#### 3.1 创建一个新的Android项目
我们打开Android Studio,新建一个项目,Application name 填写 Petstore,Company domain 填写 example.com,从而 Package name 成为com.example.petstore,和我们前面生成 SDK 时使用的包名保持一致。
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/20170704-3.jpg)
然后一路点击Next ,使用默认配置(Empty Activity, Activity Name是MainActivity,Layout Name 是activity_main)创建一个项目。
#### 3.2 整合API Gateway生成的Android SDK
使用 API Gateway生成的SDK其实有官方文档:
http://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/how-to-generate-sdk-android.html
但是我们今天用更简便的方法,直接用build.gradle管理包,不需要按官方文档那样安装Maven再编译等。
项目创建起来后,我们在Project面板启用Project视图。
打开app/build.gradle,在 dependencies段添加以下几行,其实就是AWS SDK 的核心包,API Gateway的包以及用于解析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'`
然后按提示点击Sync now同步项目。这时会下载上述3个依赖库,视网络状态可能需要一些时间。我们可以不用等待,继续后面的配置。
添加访问互联网权限, 打开/app/src/main/AndroidManifest.xml,在 <application 节点前面加上一行:
`<uses-permission android:name="android.permission.INTERNET" />`
我们打开之前下载的SDK压缩包解压的目录 src/main/java/com/example/petstore,把下面的文件和目录
│ PetstoreClient.java
└─model
Pet.java
Pets.java
PetsItem.java
复制到 Android项目中 com.example.petstore下面。完成的样子如下图所示:
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/20170704-4.jpg)
#### 3.3 编写代码用SDK实现调用API
我们使用Cognito进行验证,所以需要先创建一个Cognito 的 Federated identity pool,有关方法请参阅相关文档,这里不再赘述。
http://docs.aws.amazon.com/zh_cn/cognito/latest/developerguide/identity-pools.html
在Android Studio里打开 MainActivity.java。先定义2个常量
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/20170704-7.PNG)
然后我们定义一个testPet() 方法。
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/20170704-8.PNG)
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/20170704-9.PNG)
最后在onCreate()方法里加上如下代码,新开线程做HTTP请求,就可以了。
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/20170704-10.PNG)
到这里例子已经完成,我们运行一个App,顺利地话可以看到如下的日志输出,我们已经可以顺利得到API接口的响应结果了。
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/20170704-5.jpg)
这是在模拟器上运行的弹出层效果的截图。
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/20170704-6.jpg)
例子的源码在下面 git 库的 Petstore 目录,供大家参考。
https://github.com/xfsnow/android
使用时请记得把MainActivity.java里的COGNITO_POOL_ID 换成你自己真实的值,以及new CognitoCachingCredentialsProvider 时要使用你的COGNITO_POOL_ID所在的region 值。
### 4. 小结
Amazon API Gateway生成的客户端SDK主要功能包括以下几点:
* 根据我们为各个接口定义的Model批量创建好相应的Model类。* 通过 AWS 核心SDK实现HTTP请求的验证。* 封装HTTP请求和响应。* 把响应结果通过Gson库转换成方便Android Java使用的Model类。
这个简单的例子也体现出生成的客户端SDK便利了客户端应用程序的开发。
**作者介绍:**
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/Xue+Feng.jpg)
薛峰,亚马逊AWS解决方案架构师,AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内和全球的应用和推广,在大规模并发应用架构、移动应用以及无服务器架构等方面有丰富的实践经验。在加入AWS之前曾长期从事互联网应用开发,先后在新浪、唯品会等公司担任架构师、技术总监等职位。对跨平台多终端的互联网应用架构和方案有深入的研究。
**本文转载自AWS技术博客。**
**原文链接:**https://amazonaws-china.com/cn/blogs/china/api-gateway-android-sd
复制代码


2019-11-14 08:00657

评论

发布
暂无评论
发现更多内容

2023 年中国 IT 用户满意度调查结果公布,融云获评「中国数字化转型新锐企业」

融云 RongCloud

数字化转型 网络 IT 企业 政企

从零创建带action的GPT(2/2)

Bob Lin

openai ChatGPT LLM GPT-4 #LangChain

【教程】Ipa Guard为iOS应用提供免费加密混淆方案

雪奈椰子

如何零成本的提高3D模型的加载速度

3D建模设计

纹理贴图 模型渲染 材质纹理 材质编辑

【论文解读】System 2 Attention提高大语言模型客观性和事实性

合合技术团队

人工智能 自然语言处理 大模型 语言模型

WiFi7-MLO(Multi-link)-IPQ9574-QCN6274- Multi-band data transmission - Improve spectrum utilization

wifi6-yiyi

ipq5018 WiFi7 ipq9574

人工智能 | LangChain 核心模块PromptsModelsParsers

测吧(北京)科技有限公司

测试

使用 Taro 开发鸿蒙原生应用 —— 当 Taro 遇到纯血鸿蒙 | 京东云技术团队

京东科技开发者

taro 前端 Web 鸿蒙Next

企业如何通过熔断降级增强服务稳定性和系统可用性?

袋鼠云数栈

熔断 API 降级 数据服务 熔断降级

国产大模型与国外差距的深度解析

百度开发者中心

人工智能 大模型 ChatGPT

大模型:深度学习之旅与未来趋势

不会算法。

大模型时代的自然语言处理利器

百度开发者中心

人工智能 大模型 Prompt

详细了解云堡垒机的作用,提高企业数据信息安全

行云管家

云计算 云服务 数据安全 企业上云 云堡垒机

ChatGPT插件:沉浸式体验人工智能

测吧(北京)科技有限公司

测试

非专业的建模人员如何给模型设置材质纹理贴图?

3D建模设计

材质贴图 纹理贴图 模型渲染 材质编辑

输入更多字符以增强大模型学习

百度开发者中心

人工智能 深度学习 大模型

文物数字化建模纹理贴图

3D建模设计

纹理贴图 模型渲染 材质纹理 材质编辑

软件测试/人工智能丨利用人工智能 ChatGPT 自动进行测试需求分析

测试人

人工智能 软件测试

从零创建一个带action的GPT(1/2)

Bob Lin

AI ChatGPT LLM GPTs

生态发展 人才先行 | 深开鸿亮相首届OpenHarmony人才生态大会

新消费日报

LED显示屏行业:消费驱动和零售渠道的新发展

Dylan

技术 LED显示屏 led显示屏厂家 消费

小程序开发实战案例四 | 小程序标题栏如何设置

盐焗代码虾

支付宝 小程序开发 导航栏

软件测试/人工智能|教你轻松玩转Edge浏览器

霍格沃兹测试开发学社

人工智能 | 聊聊AutoGPT那些事儿

测吧(北京)科技有限公司

测试

TCP连接断开:为什么要挥手四次

华为云开发者联盟

开发 华为云 数据传输 华为云开发者联盟

一文搞懂得物前端监控

得物技术

大前端

JavaScipt验证URL新方法(2023 年版)

凌览

JavaScript node.js 前端

软件测试/人工智能|人工智能与自动化测试结合实战-探索人工智能在测试领域中的应用

霍格沃兹测试开发学社

软件测试/测试开发|Docker+Jmeter+InfluxDB+Grafana 搭建性能监控平台

霍格沃兹测试开发学社

定档12月28日,WAVE SUMMIT+深度学习开发者大会2023狂欢来袭!

飞桨PaddlePaddle

人工智能 深度学习 开发者 WAVE SUMMIT

API Gateway 的Android SDK_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章