-3

我目前正在尝试弄清楚如何设置我的 Backand 应用程序及其 REST API。这个问题与问题有关:Backand deep querying。但是,我希望我能获得一些关于如何执行服务器端代码以执行循环并创建 JSON 响应的最佳实践代码示例,并使用以下标准:

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

我有一个名为“媒体”的对象和另一个名为“用户”的对象。显然,用户包含用户信息,媒体包含用户上传的图片信息。这两个对象由 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'
}
}
4

1 回答 1

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;
}
于 2016-04-26T21:17:16.750 回答