backbone.jsでsyncを呼んだ時にアクセスされるURLの変更

backbone.jsで作成したモデル(Backbone.Model.extendで作成したオブジェクト)はsave(),destroy(),fetch(),create()などのメソッドを持っている。これらは、呼ばれると裏側でsync()メソッドを呼び出している。このsync()がサーバ側に問い合わせて、永続化が行われると言う仕組み。デフォルトでは以下のような形でREST形式で問い合わせが行われる。

モデルのthis.urlが/api/fooの時の例

モデルが呼ぶメソッド url HTTPのメソッド
create /api/foo POST
save(既にデータが存在している場合) /api/foo PUT
destroy /api/foo DELETE
fetch /api/foo FETCH

backbone.jsのモデルは、このように同じURLに対して、HTTPメソッドを分ける形でクライアント側のデータとサーバ側のデータの同期をしてる。
(ちなみに、モデルにthis.urlを定義しておくと、そのURLがリソースとして使われる。this.urlを関数にしておくと、関数の実行結果がリソースへアクセスするURLとして使われる)

デフォルトでは以上の通りだけれど、sync()を上書きすることで、アクセス先を変えることができる。

sync()上書きの例(GET,POSTだけにする)

sync()を上書きする例。DELETE,PUTを使いたくないので、全てGET,POSTだけにする。以下のような呼び出しが行われるようにsync()を書き換えてみる。

モデルのthis.urlが/api/foo/の時の例
モデルが呼ぶメソッド url HTTPのメソッド
create /api/foo/create POST
save(既にデータが存在している場合) /api/foo/update POST
destroy /api/foo/delete POST
fetch /api/foo/get GET

gistに挙げてみた。