3

有没有办法在模型上添加更多的其余绑定,然后只添加四个 CRUD 函数?

var Customer = can.Model({
    findAll: 'GET /customer',    
    findOne: 'GET /customer/{id}',
    create: 'POST /customer',
    update: 'PUT /customer/{id}',
    destroy: 'DELETE /customer/{id}'
    //maybeAnOtherMethod: 'PUT /customer/{id}/activate'
}, {

});
4

1 回答 1

2

REST 背后的理念是您拥有资源并在这些资源上执行操作。资源本身由 URL 描述,动作由 http 动词描述。

因此,GET阅读动作是/customer/{id}描述您要加载的资源。这可以。因此,您的所有五种方法都很好,因为can.Model旨在使用基本 REST 接口处理 CRUD 功能

最后一个(已注释)的问题是您在 url 中混合了资源和操作。“激活”绝对是动词,没有资源。因此它不属于那里,但它应该是一个http动词。这就是为什么您找不到对这种 REST 接口编程方式的支持——仅仅是因为它不是 REST。

虽然您可以重新设计 API 以将其activate视为资源,但客户的激活或未激活状态更有可能是customer资源的一部分。您将使用该update方法,因为您正在更改有关客户的某些内容。在 CanJS 中,它看起来像这样:

Customer.findOne({id: 5), function( customer ){
  customer.attr('active', true);
  customer.save();
}

长话短说:在 REST 中,url 都是关于名词的,http 方法都是关于动词的。

这是否有助于使事情变得更清晰?

于 2013-01-18T13:32:18.227 回答