为外观 REST 服务实施定制 API
开发移动应用时,通常首先从用户界面层开始,然后使用 REST Web 服务将应用与其他应用连接。这种方法适用于小型或简单的应用程序。当应用规模更大并且希望连接到多个后端服务时,您可以无意中引入性能和安全问题。
最好在外部后端服务和用户界面之间开始构建外观 API 层,以尽可能减少对后端服务的调用次数。例如,您的移动应用可以对外墙 API 层执行一次调用,该层处理对其他 REST 服务的调用,并将所有传入数据合并到对移动应用的单个响应中。
创建完整的定制 API
使用 Oracle Mobile Hub 创建完整的自定义 API。
单击 ,然后从侧边菜单中选择开发,然后选择 API 。如果 API 已创建(无论是处于草稿还是已发布状态),您将看到 API 列表。如果不存在定制 API,您将看到包含新建 API 按钮的页。单击已创建的 API,或者单击新建 API 以开始。
定义端点
您可以创建资源来定义 API 的端点。资源是 API 的核心。它有一个类型,一些与之关联的数据,与其他资源的关系,并包含一个或多个对它起作用的方法。资源几乎可以是任何东西:图像、文本文件、其他资源的集合、逻辑事务处理、过程等。
为资源创建方法时,该方法的符号将显示在“方法”链接下方。如果需要检查资源定义,可以立即查看为资源定义的方法。单击图标可直接转到该方法定义。
通过切换到紧凑模式(位于新资源的右侧),可以清除杂乱以更快地找到资源。紧凑显示隐藏资源说明、资源类型和路径。
将方法添加到资源
方法是对资源执行的操作。“Methods(方法)”页一次显示一个方法。定义至少两个方法后,可以单击页面顶部的某个方法的图标以查看其详细信息。
为资源定义方法后,可以定义这些方法的请求和响应。
定义方法的请求
现在已选择方法,请定义要连接到的服务的请求。例如,如果您选择了 POST
方法,则现在可以定义要创建的内容。为此,您可以添加参数和请求正文,其中包含要发送到服务的数据的说明。
- 单击请求以定义请求。
- 单击添加参数并选择参数类型:查询或标题。如果该方法需要该参数,请选择必需。
- 根据所选方法,单击添加介质类型并定义方法主体。正文包含要发送到服务器的数据。例如,如果要定义
POST
方法,则需要定义要创建的项,例如新的客户列表或服务请求。如果要定义GET
方法,则不需要发送方法主体,因此不需要指定介质类型。 - 单击 Add Media Type(添加介质类型)以添加其他介质类型。如果您决定不需要该方法,请单击标题中的 X 以将其删除。
定义方法的响应
根据请求,您可能需要或不需要响应。响应描述从服务返回结果的过程。您可能要定义一个响应,用于验证您请求的数据是否已返回,或者您可能想要一个确认是否已收到请求的响应。定义响应类似于定义请求。主要的区别是,您需要选择一个状态代码,以告知连接的结果。
audits
资源的 POST
方法创建了一个响应,其状态代码为 201,指示已成功创建新资源。该示例还显示了返回响应格式 application/json
、添加的 Location
头以及包含模拟数据的消息正文:responses:
201:
description: |
The request has been fulfilled and resulted in a new resource
being created. The newly created resource can be referenced
by the URI(s)returned in the entity of the response, with the
most specific URI for the resource given by a Location header
field.
headers:
Location:
displayName: Location
description: |
Identifies the location of the newly created resource.
type: string
example: |
/20934
required: true
body:
application/json:
example: |
{
"id": 20934,
"title": "Lynn's Leaking Water Heater",
"contact": {
"name": "Lynn Adams",
"street": "45 O'Connor Street",
"city": "Ottawa",
"postalcode": "a1a1a1",
"username": "johnbeta"
},
"status": "New",
"driveTime": 30,
"priority": "high",
"notes": "My notes",
"createdon": "2014-01-20 23:15:03 EDT",
"imageLink": "storage/collections/2e029813-d1a9-4957-a69a-fbd0d74331d77/objects/6cdaa3a8-097e-49f7--9bd2-88966c45668f?user=lynn1014"
}
定义响应时,您可以决定测试端点或单击导航栏中的端点以返回到“资源”主页。您可以在 API 设计器中转到另一个页面以创建根、资源类型或特性,或添加 API 文档。
如果您决定不需要该方法,请单击标题中的 X 以将其删除。
创建 REST 连接器 API
使用 REST 连接器 API 向导创建、配置和测试连接器 API。
要获取基本工作连接器 API,可以提供连接器 API 的名称和外部服务的 URL。
在其中,可以执行以下操作:
-
定义规则以形成要访问的数据的特定请求或响应。
-
为要访问的服务配置客户端安全策略。
-
测试连接并测试对连接进行的调用的结果。
您必须创建定制 API 和实施,以使您的应用能够调用连接器 API,并自动生成 API 和实施。如果要手动执行此操作,必须使用适当的资源创建定制 API,然后实施定制代码。
设置基本连接器
可以通过完成 REST Connector API 向导中的前两页来创建正常运行的连接器。
-
单击
,然后从侧边菜单中选择开发,然后选择 API 。
-
单击 REST (如果这是要创建的第一个连接器 API)或新建连接器,然后从下拉列表中选择 REST 。
-
通过提供以下项来确定新的 REST 连接器 API:
-
API 显示名称:连接器 API 列表中将显示的名称。
-
API 名称:连接器 API 的唯一名称。
默认情况下,此名称附加到相对基 URI 作为连接器 API 的资源名称。您可以在 API 名称字段下方看到基本 URI。
除了此连接器 API 的新版本之外,其他连接器 API 不能具有相同的资源名称。
-
简短说明:选择此 API 时,此说明将显示在“连接器”页上。
-
-
单击创建。
-
在“REST 连接器 API”对话框的“一般信息”页中,设置超时值:
-
HTTP 读取超时:等待读取数据所需的最长时间(毫秒)。如果未提供值,则应用默认值 20 秒。
-
HTTP 连接超时:连接到远程 URL 所花费的时间(毫秒)。值为 0mms 表示允许无限超时。
HTTP 超时值必须小于默认值为 40,000 毫秒的
Network_HttpRequestTimeout
策略。注意:
如果您除了服务开发人员角色外还具有移动云管理员角色,则可以从“管理员”视图打开policies.properties
文件以查看当前环境的网络策略值。否则,请向移动云管理员询问值。
-
-
单击描述符,然后输入服务的连接信息。
如果您提供 Swagger 描述符 URL,则会标识并显示可用资源,并且您可以选择所需的资源。
注意:
仅支持标准 Internet 访问端口 80 和 443。无法使用定制端口连接到服务。 -
单击保存。
-
(可选)单击测试,选择验证身份证明,然后对服务进行测试调用。
您可以通过以下方式进一步配置连接器:
-
(如果已在“描述符”页上提供了描述符)转到资源页,然后选择公开资源的方法。
-
定义规则。
-
设置安全性策略。
为了确保您的连接器 API 配置有效,您应在发布之前对其进行彻底测试(而不仅仅是来自“连接器 API 测试”页)。也就是说,您还应该测试使用此连接器 API 的定制 API(及其实现)。从本质上讲,如果您准备发布连接器 API,您也应该准备好发布调用它的定制 API。
设置规则
您可以设置规则来定义移动应用程序与服务之间的交互。通过规则,您可以为服务上对资源的所有调用添加默认参数值、对特定代理路径的调用以及对某些类型的操作(动词)的调用。这有助于实施 URL 字符串的一致语法,使定制代码开发人员不必插入这些值,并且可以通过分析跟踪不同的调用。
可以创建一个或多个规则。每个规则可以具有一个或多个 Query
和 Header
类型的参数。
如果未应用任何规则,所有调用都将通过代理传递到现有服务。
您刚刚定义的规则的说明显示在规则标题中默认参数部分正上方。例如,假设提供了以下值:
-
远程 URL =
https://maps.googleapis.com/maps/api/directions
/json?origin=los+angeles&destination=seattle
-
本地 URI =
myMapAPI
-
具有以下参数的规则:
Query:key:A3FAEAJ903022
-
GET
和PUT
HTTP 方法
规则说明如下所示:
对于可从 myMapAPI/directions
获取的 GET
到 https://maps.googleapis.com/maps/api/directions/json?origin=los+angeles&destination=seattle
,请包括 Query:key=A3FAEAJ903022
。
如果未创建规则,则说明如下:
对于 myMapAPI
上提供的 https://maps.googleapis.com/maps/api/directions
的所有方法,将不应用任何默认参数。
现在,您有一个映射到现有服务的基本 URI。使用我们的示例:
mobile/connector/myMapAPI/directions/json?origin=los+angeles&destination=seattle
映射到 https://maps.googleapis.com/maps/api/directions/json?origin=los+angeles&destination=seattle