【问题标题】:JavaScript mapping JSON data from external REST APIJavaScript 映射来自外部 REST API 的 JSON 数据
【发布时间】:2017-10-05 01:11:30
【问题描述】:

对于我正在构建的 Web 应用程序的前端,我使用 RESTful Web 服务来获取我的数据。这样的调用和响应可能如下所示:

// 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;
    }

}

此示例使用 TypeScript,但也可以使用 ES6 类创建

在我想更改此对象的属性之前,这可以正常工作。

例如Persons 的国家必须改变,因为他搬到了法国。而且他的名字也被编辑了,因为有一个错误:

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 吗?是否有在客户端执行此操作的最佳实践?

【问题讨论】:

    标签: javascript json rest design-patterns mapping


    【解决方案1】:

    如果您要发回数据并且它是 UPDATE 而不是 PATCH,那么您的类应该包含更新资源所需的所有属性。

    为您的班级创建一个constructor method 来传递JSON 怎么样?还有一个 toJSON 类方法,您可以在其中将属性解析为格式正确的 JSON。

    【讨论】:

    • 这个 toJSON 方法会是什么样子?更改需要与旧的 JSON 合并,后者必须存储在某个地方。并且将其存储在类中可能效率不高。
    猜你喜欢
    • 2013-07-08
    • 2013-11-29
    • 1970-01-01
    • 2020-11-01
    • 2016-06-16
    • 1970-01-01
    • 2022-01-10
    • 2018-05-14
    • 1970-01-01
    相关资源
    最近更新 更多