2017-05-06 39 views
0

對於構建的Web應用程序的前端,我使用RESTful Web服務來獲取我的數據。這樣的調用和響應可能如下所示:JavaScript映射來自外部REST API的JSON數據

// GET api.example.com/persons/3 
{ 
    p_id: 3, 
    p_fn: 'Jon', 
    p_ln: 'Smith', 
    p_addr: { 
     str: 'Baker Street', 
     city: 'London', 
     cntry: 'GB' 
    }, 
    // and more stuff... 
} 

我並不需要所有這些數據在我的應用程序,所以我決定把它們映射到我自己的類。這也給了重命名和結構調整的屬性,從外部API解耦的好處,並添加一些方法的能力:

class Person { 

    name: { 
     first: string, 
     last: string 
    }; 
    country: string; 

    getFullName(): string { 
     return this.name.first + ' ' + this.name.last; 
    } 

} 

本例使用打字稿,但也可以使用ES6類創建

這很好,直到我想改變這個對象的屬性。

例如Person的國家必須改變,因爲他搬到了法國。而且他的名字被編輯,因爲有一個錯誤:

person.country = 'FR' 
person.name.first = 'John' 

現在的變化必須被送回外部服務:

// PUT api.example.com/persons/3 
{ 
    p_id: 3, 
    p_fn: 'John', 
    p_ln: 'Smith', 
    p_addr: { 
     str: 'Baker Street', 
     city: 'London', 
     cntry: 'FR' // This is where my example falls apart 
    }, 
    // and more stuff... 
} 

但如果沒有屬性被更改,呼叫切不可完全可以執行,所以必須有某種檢測。

所以基本上我不得不在這些本地實例和類DTO對象之間來回翻譯。什麼是設置這個最好的方法?

有沒有這樣做的標準方式?我聽說過一些關於ORM或持久化模式的東西,但是這些適用於JavaScript的是什麼?有沒有最好的做法來做這個客戶端?

回答

0

如果您要將數據發回並且它是一個UPDATE而不是PATCH,那麼您的類應該包含更新資源所需的所有屬性。

如何爲您的課程創建constructor method,然後傳遞JSON?還有一個toJSON類方法,您可以將屬性解析爲格式正確的JSON。

+0

這個toJSON方法怎麼樣?這些更改需要與舊的JSON合併,舊的JSON必須存儲在某個地方。將它存儲在課堂上可能不是非常有效。 –