2016-04-26 79 views
-3

我目前正在尝试弄清楚如何设置我的Backand应用程序及其REST API。此问题与问题相关:Backand deep querying。但是,我希望能够得到一些最佳实践代码示例,了解如何执行服务器端代码以执行循环,并创建JSON,并使用以下条件进行响应:关于JSON转换和相关对象的最佳做法Backand

我希望能够发出REST请求Backand并获取一个数据对象,它已经从我的数据库中操纵/合并了两个数据对象。

我有一个叫做“媒体”的对象,另一个叫做“用户”。显然,用户包含用户信息,媒体包含用户上传的图片的信息。这两个对象由userId和Backand中的集合相关联。我想创建一个GET请求,用包含相关用户信息的每个图片对象上的所有图片和嵌套用户对象的JSON对象进行响应。我知道我找回了“relatedObjects”,然后我可以在客户端进行一些操作,但我希望有另一种更简单的方法可以通过Backand管理系统在服务器端代码或查询中执行此操作。

所以,我的问题是,什么是最好的方式来产生REST调用,通过Backand响应与嵌套相关数据对象的数据库对象?

这里的对象模型(缩短清晰度):

用户对象模型建立在Backand在Backand

{ 
"name": "media", 
"fields": { 
    "description": { 
    "type": "string" 
    }, 
    "thumbnail": { 
    "type": "string" 
    }, 
    "fullImage": { 
    "type": "string" 
    }, 
    "user": { 
    "object": "users" 
    } 
}} 
设立

{ 
"name": "users", 
"fields": { 
    "media": { 
    "collection": "media", 
    "via": "user" 
    }, 
    "email": { 
    "type": "string" 
    }, 
    "firstName": { 
    "type": "string" 
    }, 
    "lastName": { 
    "type": "string" 
    } 
} } 

媒体对象模型

我正在寻找的最终JSON响应:

{ 
description: 'Blah', 
thumbnail: 'someImageUrl.jpg', 
fullImage: 'someImageUrl.jpg', 
user: { 
    firstName: 'John' 
    lastName: 'Smith' 
    email: '[email protected]' 
} 
} 
+0

你想要什么? –

+0

嗨Wasiq,我认为这很清楚。我在询问将相关对象合并到一个对象时Backand BAAS App的最佳做法。我最好的猜测是它应该通过Backand中的服务器端javascript来完成,并且我会感谢任何以最佳方式实现此目标的服务器端JavaScript代码。 – trustkool

+0

这是意见基础上的问题。如果你使用关系数据库,那么你将不得不做连接表。如果您使用NoSQL DB,那么它会更容易,因为您可以在将数据发送回客户端之前预先填充指针。 Mongodb是NoSQL DB的一个很好的例子。 –

回答

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; 
}