3

4つの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機能を処理するように設計されているため、5つの方法はすべて問題ありません。

最後の(コメントされた)ものの問題は、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 に答える