6

假设我有一个包含多个字段的资源,其中一些是只读的。或者它们可能属于我想在服务器上以不同方式处理的不同用例。

例如,我的bing资源如下所示:

{id: 1,
 foo: "A", 
 bar: "B", 
 createdAt: "2013-05-05"}

我想让 Restangular 只 PUT 一些字段,执行如下请求:

PUT /bing/1 {foo: "A"}
PUT /bing/1 {bar: "B"}
PUT /bing/1 {foo: "A", bar: "B"}

不想做的是:

PUT /bing/1 {id: 1, foo: "A", bar: "B", createdAt: "2013-05-05"}

我怎样才能实现它?

4

3 回答 3

22

我是 Restangular 的创造者。

@Nicholas 是绝对正确的:)。那是一个补丁而不是一个 PUT。Restangular 确实支持它:)。

elem.patch({foo: 2})restangularized如果 elem 已经是一个对象,那将是要走的路。

希望这可以帮助!!

于 2013-08-11T04:00:25.290 回答
6

PATCH不是一个PUT

https://www.rfc-editor.org/rfc/rfc5789

于 2013-08-08T12:35:34.167 回答
2

一种方法是将整个对象传递给 patch 方法,包括您不想发送到后端的所有字段,然后在发送请求之前使用请求拦截器删除任何不需要的字段。

例如,要始终createdAt从任何补丁请求中删除该字段,您可以执行以下操作

app.config(function(RestangularProvider) {
  RestangularProvider.setRequestInterceptor(function(element, operation, route, url) {
    if (operation === 'patch') {
      delete element.createdAt;
      return element;
    } 
  });
});

要了解有关请求拦截器的更多信息,请参阅setRequestInterceptor上的文档

于 2013-11-29T19:03:49.303 回答