2017-05-06 67 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必须存储在某个地方。将它存储在课堂上可能不是非常有效。 –