【问题标题】:ember-data and json-patch requestsember-data 和 json-patch 请求
【发布时间】:2020-02-07 09:56:18
【问题描述】:

ember-data 可以在 model.save() 调用上发送 json-patch PATCH 吗? (媒体类型为application/json-patch+json RFC6902)

文档说是,但没有详细信息:

https://guides.emberjs.com/release/models/creating-updating-and-deleting-records/#toc_persisting-records

测试它会显示 PUT 请求以及请求中的整个模型。

【问题讨论】:

  • 默认情况下不是。但是您可以编写一个适配器和序列化程序对来执行此操作。
  • 我必须为每个模型克隆它?
  • 一点也不。如果模型没有另一个适配器/序列化器,将使用应用程序适配器和序列化器。所以把它放在你的应用程序适配器/序列化器中。
  • 好的,这种适配器可能在某处可用,不是吗?我不敢相信这份工作必须由框架用户编写。
  • 有一个RFC for adding JSON Patch support to Ember Data,但决定将其留给用户空间。不确定是否有完善的插件。 JSON:API,GraphQL 和一些自定义 REST API 在 Ember 社区中的使用量远远超过 JSON Patch。

标签: json http ember.js ember-data json-patch


【解决方案1】:

我怀疑您的应用程序使用的是 RESTAdapter 而不是 JSONAPIAdapter

RESTAdapter 是 Ember Data 2.0 之前的默认适配器,如 here 所述

你可以看看两个适配器updateRecord 方法:

RestAdapter

/**
    Called by the store when an existing record is saved
    via the `save` method on a model record instance.
    The `updateRecord` method serializes the record and makes an Ajax (HTTP PUT) request
    to a URL computed by `buildURL`.
    See `serialize` for information on how to customize the serialized form
    of a record.
    @method updateRecord
    @param {Store} store
    @param {Model} type
    @param {Snapshot} snapshot
    @return {Promise} promise
  */
  updateRecord(store, type, snapshot) {
    const data = serializeIntoHash(store, type, snapshot, {});

    let id = snapshot.id;
    let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');

    return this.ajax(url, 'PUT', { data });
  }

JSONAPIAdapter

updateRecord(store, type, snapshot) {
    const data = serializeIntoHash(store, type, snapshot);

    let url = this.buildURL(type.modelName, snapshot.id, snapshot, 'updateRecord');

    return this.ajax(url, 'PATCH', { data: data });
  }

如您所见,一个使用PUT,另一个使用PATCH。 JSONAPIAdapter 现在是默认的,这就是文档处理PATCH 请求的原因。

如果你想使用PATCH而不是PUT并保留RestAdapter,你应该从RestAdapter扩展并修改updateRecord方法:D

我希望它会找到你;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2015-03-07
    • 2013-05-09
    • 1970-01-01
    • 2015-06-09
    • 2016-09-30
    • 2016-08-13
    相关资源
    最近更新 更多