我目前正在尝试弄清楚如何设置我的Backand应用程序及其REST API。这个问题与问题有关:返回和深度查询。但是,我希望我能获得一些有关如何执行服务器端代码以执行循环并使用以下条件创建 JSON 响应的最佳实践代码示例:
我希望能够向 Backand 发出 REST 请求,并获取一个从我的数据库中操作/合并两个数据对象的数据对象。
我有一个名为"media"的对象和另一个名为"users"的对象。显然,用户包含用户信息,媒体包含用户上传的图片上的信息。这两个对象由 userId 和 Backand 中的收集集相关联。我想发出一个 GET 请求,该请求使用包含所有图片的 JSON 对象和包含相关用户信息的每个图片对象上的嵌套用户对象进行响应。我知道我得到了"relatedObjects",然后我可以在客户端进行一些操作,但我希望有另一种更简单的方法可以从 Backand 管理系统在服务器端代码或作为查询来做到这一点。
所以,我的问题是,生成一个 REST 调用的最佳方法是什么,该调用通过 Backand 使用嵌套的相关数据对象响应数据库对象?
下面是对象模型(为清楚起见,缩短):
在 Backand 中设置的用户对象模型
{
"name": "users",
"fields": {
"media": {
"collection": "media",
"via": "user"
},
"email": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
}
} }
在 Backand 中设置的媒体对象模型
{
"name": "media",
"fields": {
"description": {
"type": "string"
},
"thumbnail": {
"type": "string"
},
"fullImage": {
"type": "string"
},
"user": {
"object": "users"
}
}}
我正在寻找的最终 JSON 响应:
{
description: 'Blah',
thumbnail: 'someImageUrl.jpg',
fullImage: 'someImageUrl.jpg',
user: {
firstName: 'John'
lastName: 'Smith'
email: 'john@smith.com'
}
}
以防万一其他人遇到这种情况,我选择使用服务器端 javascript 代码来做,因为我的后端、SQL 和 NoSQL 查询技能非常弱。我猜noSQL查询在性能方面可能会更好。我仍然想看看如何在noSQL中完成它。无论如何,我在 Backand 操作中的服务器端 javascript 代码可以完成这项工作。在这里:
/* globals
$http - Service for AJAX calls
CONSTS - CONSTS.apiUrl for Backands API URL
Config - Global Configuration
socket - Send realtime database communication
files - file handler, performs upload and delete of files
request - the current http request
*/
'use strict';
function backandCallback(userInput, dbRow, parameters, userProfile) {
var response = [];
var request =
$http({
method: "GET",
url: CONSTS.apiUrl + "/1/objects/media",
headers: {"Authorization": userProfile.token},
params: {
exclude: 'metadata',
deep: true
}
});
var object = request.data;
var related = request.relatedObjects.users;
for (media in object) {
if (object.hasOwnProperty(media)) {
for (user in related) {
if (object[media].user == related[user].id) {
response.push({
id: object[media].id,
thumbnailUrl: object[media].thumbnail,
description: object[media].description,
fullName: related[user].firstName + ' ' + related[user].lastName,
email: related[user].email
});
}
}
}
}
return response;
}