【问题标题】:How to serialize relationships into JSON-API without relationship id's?如何在没有关系 ID 的情况下将关系序列化为 JSON-API?
【发布时间】:2016-02-04 16:40:45
【问题描述】:

我连接的 API 没有使用 JSON-API 作为其响应格式,因此我必须为我的 Ember 应用程序序列化响应。

我遇到的问题是我的 API 响应如下所示:

{
    @type: "application/x.app-name.nurse-collection+json",
    @type.item: "application/x.app-name.nurse+json",
    @type.collection: "application/x.app-name.nurse-collection+json",
    @href: "http://192.168.33.10:3000/api/nurses{?includePatients}",
    @item: "http://192.168.33.10:3000/api/nurses/{id}",
    items: [
    {
        @type: "application/x.app-name.nurse+json",
        @type.item: "application/x.app-name.nurse+json",
        @type.collection: "application/x.app-name.nurse-collection+json",
        @href: "http://192.168.33.10:3000/api/nurses/1{?includePatients}",
        id: 1,
        Nurse: "Maria Holmes",
        NurseTelephoneNo: "123 4567",
        NurseMobileNo: "0123345566",
        Email: "someone@example.com",
        Patients: {
            @type: "application/x.app-name.patient-collection+json",
            @href: "http://192.168.33.10:3000/api/nurses/1/patients{?name,gender,includeNurse,includeEvents,includeReferrals,includeReviews,includePanels,includeRetrospectives,includePhbs,includeDisputeStage2s,includeDisputeResolutionPanels,includeEthnicity,includeFirstLanguage,includeMaritalStatus,includeReligion,includeSecurityLevel,includeSexualOrientation,includeWhichReview}",
            @rel: "http://192.168.33.10:3000/api/nurses/1/patients{?name,gender,includeNurse,includeEvents,includeReferrals,includeReviews,includePanels,includeRetrospectives,includePhbs,includeDisputeStage2s,includeDisputeResolutionPanels,includeEthnicity,includeFirstLanguage,includeMaritalStatus,includeReligion,includeSecurityLevel,includeSexualOrientation,includeWhichReview}"
            }
        },
        {
        @type: "application/x.app-name.nurse+json",
        @type.item: "application/x.app-name.nurse+json",
        @type.collection: "application/x.app-name.nurse-collection+json",
        @href: "http://192.168.33.10:3000/api/nurses/2{?includePatients}",
        id: 2,
        Nurse: "Julie Smart",
        NurseTelephoneNo: "543 1234",
        NurseMobileNo: null,
        Email: "someone@example.com",
        Patients: {
            @type: "application/x.app-name.patient-collection+json",
            @href: "http://192.168.33.10:3000/api/nurses/2/patients{?name,gender,includeNurse,includeEvents,includeReferrals,includeReviews,includePanels,includeRetrospectives,includePhbs,includeDisputeStage2s,includeDisputeResolutionPanels,includeEthnicity,includeFirstLanguage,includeMaritalStatus,includeReligion,includeSecurityLevel,includeSexualOrientation,includeWhichReview}",
            @rel: "http://192.168.33.10:3000/api/nurses/2/patients{?name,gender,includeNurse,includeEvents,includeReferrals,includeReviews,includePanels,includeRetrospectives,includePhbs,includeDisputeStage2s,includeDisputeResolutionPanels,includeEthnicity,includeFirstLanguage,includeMaritalStatus,includeReligion,includeSecurityLevel,includeSexualOrientation,includeWhichReview}"
        }
    }, 

    ...

    ]
}

所以在这个例子中,patients 可能是一个集合,但在我到达那个端点之前,我没有 hasMany 关系的 id。

我想知道是否有办法以符合 JSON-API 的方式对其进行序列化,但一旦我的应用决定转到 patients 端点,我就可以异步加载关系数据。

【问题讨论】:

    标签: ember.js ember-data json-api


    【解决方案1】:

    我会编写一个适合这种响应类型的自定义序列化程序,而不是将其转换为 JSON-API 规范。

    这里似乎没有关于患者记录的任何信息(即 id 列表),因此请在此处忽略它,除非您想为 hasMany 设置 link 属性。

    异步加载关系数据将适用于 ember-data。当您获得一组patient 记录并将它们添加到存储中时,只要加载的记录都有nurse_id,它们就可以使用nurse.get('patients')

    【讨论】:

      猜你喜欢
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 2015-10-18
      相关资源
      最近更新 更多