RESTViewGroupで生成したAPIを呼び出すためのjQueryプラグイン

Kay Framework の RESTViewGroup や appengine-rest-server を使って生成した RESTful な API を、JavaScript から呼び出すための jQuery プラグインを作ってみました。

(function(){

function Rest(url){
    this.url = url;
    this.filters = new Array();
}

Rest.prototype = {
    addFilter: function(operation, property, value) {
        var filter = operation + property + "=" + value;
        this.filters.push(filter);
        return this;
    },
    toQuery: function() {
        var query = this.url;
        if (0 < this.filters.length) {
            query += "?" + this.filters.join("&");
        }
        return query
    },
    feq: function(property, value) {
        return this.addFilter("feq_", property, value);
    },
    flt: function(property, value) {
        return this.addFilter("flt_", property, value);
    },
    fgt: function(property, value) {
        return this.addFilter("fgt_", property, value);
    },
    fle: function(property, value) {
        return this.addFilter("fle_", property, value);
    },
    fge: function(property, value) {
        return this.addFilter("fge_", property, value);
    },
    fne: function(property, value) {
        return this.addFilter("fne_", property, value);
    },
    fin: function(property, values) {
        return this.addFilter("fin_", property, values.join(","));
    },
    order: function(property) {
        return this.addFilter("order", "", property);
    },
    get: function(data, callback, type) {
        return $.get(this.toQuery(), data, callback, type);
    },
    getJSON: function(data, callback) {
        return $.getJSON(this.toQuery(), data, callback);
    },
}

jQuery.extend({
    rest: function(url) {
        return new Rest(url);
    }
});

})();

わざわざ jQuery プラグインとして実装した理由はありません。なんとなくです。

使い方はこんな感じ。

$.rest("http://sample.appspot.com/rest/Player")
 .feq("name", "Ichiro")
 .flt("age", 30)
 .fge("height", 175)
 .getJSON(function(ret) {
     alert(ret);
 });

RESTViewGroup や appengine-rest-server は、手軽に Web API を生成できて便利です。でも、取得するデータをフィルタリングしたいとき、URL を組み立てるのが面倒でした。

このプラグインを使うことで、URL を組み立てる手間が軽減……するといいな。