ember-数据和json-补丁请求

ember-data and json-patch requests

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 请求。

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

RESTAdapter was the default adapter before Ember Data 2.0 as stated 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

希望它能找到你;)