Дополнительные функции на модели canjs
Есть ли способ добавить больше привязок покоя к модели, чем просто четыре функции 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'
}, {
});
1 ответ
Идея REST заключается в том, что у вас есть ресурсы и действия над этими ресурсами. Сам ресурс описывается URL, действие - глаголом http.
Следовательно, GET
это действие для чтения, /customer/{id}
описывает ресурс, который вы хотите загрузить. Это отлично. И так, все ваши пять методов в порядке, потому что can.Model
предназначен для работы с функциями CRUD с помощью базового интерфейса REST.
Проблема с последним (прокомментированным) состоит в том, что вы смешиваете ресурс и действие внутри URL. "Активировать", безусловно, глагол, а не ресурс. Следовательно, он не принадлежит там, но это должен быть глагол http. Вот почему вы не нашли поддержки для этого способа программирования интерфейса REST - просто потому, что это не REST.
Хотя вы могли бы изменить дизайн API, чтобы думать о activate
как ресурс, более вероятно, что статус клиента как активированный или не активированный является частью customer
ресурс. Вы бы использовали update
метод, как вы меняете что-то о клиенте. В CanJS это будет выглядеть примерно так:
Customer.findOne({id: 5), function( customer ){
customer.attr('active', true);
customer.save();
}
Короче говоря, в REST все URL-адреса относятся к существительным, а методы http - к глаголам.
Помогает ли это сделать вещи немного яснее?