关于 JSON 转换和相关对象的最佳实践 Backand

Posted

技术标签:

【中文标题】关于 JSON 转换和相关对象的最佳实践 Backand【英文标题】:Best practice Backand regarding JSON transformation and related objects 【发布时间】:2016-04-26 17:45:00 【问题描述】:

我目前正试图弄清楚如何设置我的 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'


【问题讨论】:

你想达到什么目的?? 嗨 Wasiq,我认为这很清楚。我在问将相关对象组合成一个对象时,Backand BAAS App 的最佳实践是什么。我最好的猜测是,它应该通过 Backand 中的服务器端 javascript 来完成,我希望能以最佳方式实现这一点的任何服务器端 javascript 代码。 这是基于意见的问题。如果您使用关系数据库,那么您将不得不做连接表。如果您使用 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;

【讨论】:

以上是关于关于 JSON 转换和相关对象的最佳实践 Backand的主要内容,如果未能解决你的问题,请参考以下文章

关于依赖项的最佳实践

在 Rails 数据库中存储和稍后访问 JSON 对象的最佳实践

关于Ajax和Json的面试题

JSON 安全最佳实践?

ObjectMapper - 线程安全和性能的最佳实践

bson.json_util 日期时间编码和解码最佳实践