2016-04-26 73 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; 
}