我目前正在尝试弄清楚如何设置我的Backand应用及其REST API。此问题与问题有关:Backand deep querying。但是,我希望能够获得一些关于如何执行服务器端代码以执行循环并使用以下条件创建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'
}
}
答案 0 :(得分:1)
万一其他人遇到这个,我选择使用服务器端的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;
}