是否可以在不使用 Oracle MCS 中的连接器的情况下创建自定义 API?
Posted
技术标签:
【中文标题】是否可以在不使用 Oracle MCS 中的连接器的情况下创建自定义 API?【英文标题】:Is it possible to create custom API without using connectors in Oracle MCS? 【发布时间】:2017-01-09 12:51:48 【问题描述】:我想在不使用连接器的情况下创建自定义 API。我想提供我的数据,然后想通过自定义 API 在移动设备中访问它们。
"getLIST":
"PendingList": [
"TRANSACTION_ID": "1612342887",
"TRANSACTION_STEP_ID": "2344",
"SIT_NAME": "Certificate Request",
"PERSON_ID": "3435",
"FROM_USER": "Rahul",
"STATUS": "Pending",
"FUTURE1": null,
"FUTURE2": null,
"FUTURE3": null,
"FUTURE4": null,
"FUTURE5": null
,
"TRANSACTION_ID": "161234887",
"TRANSACTION_STEP_ID": "143234840",
"SIT_NAME": "Certificate Request",
"PERSON_ID": "3436",
"FROM_USER": "Sashanka",
"STATUS": "Pending",
"FUTURE1": null,
"FUTURE2": null,
"FUTURE3": null,
"FUTURE4": null,
"FUTURE5": null
,
]
如果我提供上述 JSON 有效负载作为响应,并通过此自定义 api "/mobile/customtest/getLIST/PendingList?PERSON_ID=3435" ,我可以获得详细信息
有可能吗?
【问题讨论】:
您能说明一下您的要求吗?当您说您不想使用连接器时,这与您描述的有效负载有什么关系?您是否只想在自定义 API 中对响应进行硬编码以包含上述有效负载,但是您想搜索 person_id=3435 的 JSON 数组? 是的...我想硬编码响应并搜索 JSON 数组。 我认为这是不可能的。请参阅 Anand 的建议,将您的数据加载到 MCS 表中,然后使用您的自定义 API 以编程方式搜索该表 只想知道,为什么选择不带连接器的自定义 API? 【参考方案1】:绝对!关注文档here 和视频here。 虽然,是的,我们通常使用自定义 API 通过连接器充当另一个服务调用的包装器,您不必这样做,如果您只想返回固定/静态有效负载,您可以将其添加为响应GET 调用。
但是 - 如果您希望搜索数组等,那么这是更多的工作,应该在服务中完成 - 因此需要一个连接器。
这里的说明: 添加基础知识(API 名称、消息媒体类型和简要说明)。
通过设置资源和至少一种方法来定义端点。
设置访问安全性。
在您定义至少一个资源后测试您的端点。 要全面完善您的 API,请使用 API Designer 来帮助您添加基本组件以实现强大的 API:
提供 API 元数据(即 API 的基本属性,即 API 显示名称、API 名称和简短描述),或者,如果您已有包含 API 配置的 RAML 文档,则您可以将其上传到 API Designer。所有信息(元数据、资源、方法和消息正文的模式)都从 RAML 文档中提取并加载到 API Designer 中,让您可以快速继续测试端点或编辑 API 配置。要提供有效的 RAML 文件,请参阅 RAML。
添加一个或多个根和嵌套资源。
添加对资源进行操作的方法。
创建一个模式来描述数据主体。
在设计时使用示例数据测试您的端点,并根据需要进行任何更改。
允许匿名访问您的 API 或指定哪些角色可以访问它。
为您的自定义 API 添加文档
【讨论】:
据我了解,我可以对 JSON 数组响应做同样的事情吗??【参考方案2】:OP 想要实现的目标仍不清楚,但在纯粹回答有关搜索硬编码 JSON 数组并返回结果的问题时,以下代码显示了这样一个基于“Employees”数组的示例:
module.exports = function(service)
var employees = [
"id": "103",
"username": "rbarkhouse",
"firstName": "Rick",
"lastName": "Barkhouse"
,
"id": "107",
"username": "kbrown",
"firstName": "Karen",
"lastName": "Brown"
,
"id": "108",
"username": "ldavies",
"firstName": "Larry",
"lastName": "Davies"
];
service.get('/mobile/custom/hrapi/employee', function(req,res)
res.send(200, employees);
);
service.get('/mobile/custom/hrapi/employee/:id', function(req,res)
var id = req.params.id;
var employee =
employees.filter(function(el) return el.id == id; );
if (employee == null)
res.send(404);
else
res.send(200, employee[0]);
);
;
注意雇员数组“filter”函数的使用,我们传入一个匿名函数,该函数能够搜索返回匹配作为 URL 参数传入的“:id”的雇员元素。
【讨论】:
谢谢。但是我认为,对于大型 JSON 数组,我无法遵循此过程,因此我想到了在 Oracle MCS 中使用数据库管理。【参考方案3】:如果您不想使用 MCS 连接器,请使用 MCS 提供的平台 API。您可以在 MCS 中创建表。然后使用自定义 API 从表中获取数据。
【讨论】:
OP 仍然需要加载数据表。他将无法在自定义 API 中搜索“静态”JSON。平台数据库表的文档在这里:docs.oracle.com/en/cloud/paas/mobile-cloud/mcsua/… 没听懂你说什么 他必须将他的数据存储在数据库 API 中,然后可以搜索并返回结果 - 他不必使用连接器。 DB API 通过 REST 调用进行访问和操作。所以他需要一些自定义代码来做他想做的事。以上是关于是否可以在不使用 Oracle MCS 中的连接器的情况下创建自定义 API?的主要内容,如果未能解决你的问题,请参考以下文章
在不使用 Sqoop 的情况下在 HDFS 中加载 Oracle 数据
在不知道现有密码 PHP 的情况下更改 oracle db 用户密码