六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 44|回复: 0

CouchDB's RESTful API

[复制链接]

升级  20.67%

21

主题

21

主题

21

主题

秀才

Rank: 2

积分
81
 楼主| 发表于 2013-1-23 02:27:19 | 显示全部楼层 |阅读模式
实验环境:   Ubuntu 7.10,  CouchDB 0.8.0, Curl in shell, Httpheader plugin for firefox
 
 

  • CouchDB以及商业应用, Reference URL:  http://couchdb.apache.org/ &&http://wiki.apache.org/couchdb/CouchDB_in_the_wild
  • 启动和打开后台管理

    • $ sudo /usr/local/bin/couchdb start
      Apache CouchDB 0.8.0-incubating (LogLevel=info)
      Apache CouchDB is starting.
    • 在browser(i.e. FF) 输入 http://localhost:5984/_utils/


    • www目录(作简单的测试,你可以在这里):  $  /usr/local/share/couchdb/www,   $ ls;
      browse  CouchDbToDo  couch_tests.html  favicon.ico  grid.css  image  index.html  jquery.editable-1.3.3.js  myTodo.html  replicator.html  script  style  todo.css  todo.html

  • CouchDB's javascript API
// Licensed under the Apache License, Version 2.0 (the "License"); you may not// use this file except in compliance with the License.  You may obtain a copy// of the License at////   http://www.apache.org/licenses/LICENSE-2.0//// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the// License for the specific language governing permissions and limitations under// the License.(function($) {  $.couch = $.couch || {};  $.fn.extend($.couch, {    allDbs: function(options) {      options = options || {};      $.ajax({        type: "GET", url: "/_all_dbs",        complete: function(req) {          var resp = $.httpData(req, "json");          if (req.status == 200) {            if (options.success) options.success(resp);          } else if (options.error) {            options.error(req.status, resp.error, resp.reason);          } else {            alert("An error occurred retrieving the list of all databases: " +              resp.reason);          }        }      });    },    db: function(name) {      return {        name: name,        uri: "/" + encodeURIComponent(name) + "/",        compact: function(options) {          options = options || {};          $.ajax({            type: "POST", url: this.uri + "_compact",            contentType: "application/json",            dataType: "json", data: "", processData: false,             complete: function(req) {              var resp = $.httpData(req, "json");              if (req.status == 202) {                if (options.success) options.success(resp);              } else if (options.error) {                options.error(req.status, resp.error, resp.reason);              } else {                alert("The database could not be compacted: " + resp.reason);              }            }          });        },        create: function(options) {          options = options || {};          $.ajax({            type: "PUT", url: this.uri, contentType: "application/json",            dataType: "json", data: "", processData: false,             complete: function(req) {              var resp = $.httpData(req, "json");              if (req.status == 201) {                if (options.success) options.success(resp);              } else if (options.error) {                options.error(req.status, resp.error, resp.reason);              } else {                alert("The database could not be created: " + resp.reason);              }            }          });        },        drop: function(options) {          options = options || {};          $.ajax({            type: "DELETE", url: this.uri, dataType: "json",            complete: function(req) {              var resp = $.httpData(req, "json");              if (req.status == 200) {                if (options.success) options.success(resp);              } else if (options.error) {                options.error(req.status, resp.error, resp.reason);              } else {                alert("The database could not be deleted: " + resp.reason);              }            }          });        },        info: function(options) {          options = options || {};          $.ajax({            type: "GET", url: this.uri, dataType: "json",            complete: function(req) {              var resp = $.httpData(req, "json");              if (req.status == 200) {                if (options.success) options.success(resp);              } else  if (options.error) {                options.error(req.status, resp.error, resp.reason);              } else {                alert("Database information could not be retrieved: " +                  resp.reason);              }            }          });        },        allDocs: function(options) {          options = options || {};          $.ajax({            type: "GET", url: this.uri + "_all_docs" + encodeOptions(options),            dataType: "json",            complete: function(req) {              var resp = $.httpData(req, "json");              if (req.status == 200) {                if (options.success) options.success(resp);              } else if (options.error) {                options.error(req.status, resp.error, resp.reason);              } else {                alert("An error occurred retrieving a list of all documents: " +                  resp.reason);              }            }          });        },        openDoc: function(docId, options) {          options = options || {};          $.ajax({            type: "GET",            url: this.uri + encodeURIComponent(docId) + encodeOptions(options),            dataType: "json",            complete: function(req) {              var resp = $.httpData(req, "json");              if (req.status == 200) {                if (options.success) options.success(resp);              } else if (options.error) {                options.error(req.status, resp.error, resp.reason);              } else {                alert("The document could not be retrieved: " + resp.reason);              }            }          });        },        saveDoc: function(doc, options) {          options = options || {};          if (doc._id === undefined) {            var method = "POST";            var uri = this.uri;          } else {            var method = "PUT";            var uri = this.uri  + encodeURIComponent(doc._id);          }          $.ajax({            type: method, url: uri + encodeOptions(options),            contentType: "application/json",            dataType: "json", data: toJSON(doc),            complete: function(req) {              var resp = $.httpData(req, "json")              doc._id = resp.id;              doc._rev = resp.rev;              if (req.status == 201) {                if (options.success) options.success(resp);              } else if (options.error) {                options.error(req.status, resp.error, resp.reason);              } else {                alert("The document could not be saved: " + resp.reason);              }            }          });        },        removeDoc: function(doc, options) {          options = options || {};          $.ajax({            type: "DELETE",            url: this.uri + encodeURIComponent(doc._id) + encodeOptions({rev: doc._rev}),            dataType: "json",            complete: function(req) {              var resp = $.httpData(req, "json");              if (req.status == 200) {                if (options.success) options.success(resp);              } else if (options.error) {                options.error(req.status, resp.error, resp.reason);              } else {                alert("The document could not be deleted: " + resp.reason);              }            }          });        },        query: function(mapFun, reduceFun, language, options) {          options = options || {};          language = language || "javascript"          if (typeof(mapFun) != "string") {            mapFun = mapFun.toSource ? mapFun.toSource() : "(" + mapFun.toString() + ")";          }          var body = {language: language, map: mapFun};          if (reduceFun != null) {            if (typeof(reduceFun) != "string")              reduceFun = reduceFun.toSource ? reduceFun.toSource() : "(" + reduceFun.toString() + ")";            body.reduce = reduceFun;          }          $.ajax({            type: "POST", url: this.uri + "_temp_view" + encodeOptions(options),            contentType: "application/json",            data: toJSON(body), dataType: "json",            complete: function(req) {              var resp = $.httpData(req, "json");              if (req.status == 200) {                if (options.success) options.success(resp);              } else if (options.error) {                options.error(req.status, resp.error, resp.reason);              } else {                alert("An error occurred querying the database: " + resp.reason);              }            }          });        },        view: function(name, options) {          options = options || {};          $.ajax({            type: "GET", url: this.uri + "_view/" + name + encodeOptions(options),            dataType: "json",            complete: function(req) {              var resp = $.httpData(req, "json");              if (req.status == 200) {                if (options.success) options.success(resp);              } else if (options.error) {                options.error(req.status, resp.error, resp.reason);              } else {                alert("An error occurred accessing the view: " + resp.reason);              }            }          });        }      };    },    info: function(options) {      options = options || {};      $.ajax({        type: "GET", url: "/", dataType: "json",        complete: function(req) {          var resp = $.httpData(req, "json");          if (req.status == 200) {            if (options.success) options.success(resp);          } else if (options.error) {            options.error(req.status, resp.error, resp.reason);          } else {            alert("Server information could not be retrieved: " + resp.reason);          }        }      });    },    replicate: function(source, target, options) {      options = options || {};      $.ajax({        type: "POST", url: "/_replicate", dataType: "json",        data: JSON.stringify({source: source, target: target}),        contentType: "application/json",        complete: function(req) {          var resp = $.httpData(req, "json");          if (req.status == 200) {            if (options.success) options.success(resp);          } else if (options.error) {            options.error(req.status, resp.error, resp.reason);          } else {            alert("Replication failed: " + resp.reason);          }        }      });    }  });  // Convert a options object to an url query string.  // ex: {key:'value',key2:'value2'} becomes '?key="value"&key2="value2"'  function encodeOptions(options) {    var buf = []    if (typeof(options) == "object" && options !== null) {      for (var name in options) {        if (name == "error" || name == "success") continue;        var value = options[name];        if (name == "key" || name == "startkey" || name == "endkey") {          value = toJSON(value);        }        buf.push(encodeURIComponent(name) + "=" + encodeURIComponent(value));      }    }    return buf.length ? "?" + buf.join("&") : "";  }  function toJSON(obj) {    return obj !== null ? JSON.stringify(obj) : null;  }})(jQuery);

  • CouchDB's  RESTful  API
文档库操作



    • 查看所有库(描述信息)

      • curl-X GET  "http://localhost:5984/_all_dbs" ;  Response:     ["survey","test_suite_db_b","test_suite_db","test_suite_db_a","fruit","test","todo"]

    • 查看单个库(描述信息)

      • curl-X GET  "http://localhost:5984/test/";  Response: {"db_name":"test","doc_count":0,"doc_del_count":0,"update_seq":112,"compact_running":false,"disk_size":15889}

    • 创建

      • curl-X PUT "http://localhost:5984/testdb";   Response:{"ok":true}

    • 删除

      • curl-X DELETE "http://localhost:5984/testdb";  Response: {"ok":true}

    • 压缩

      • curl-X POST http://localhost:5984/test/_compact  -H'Content-Type: application/json' -d '';   Response:{"ok":true}

    • 库同步或复制
    • [分布式]查询(采用Map/Reduce)
    • 视图(即文档可视化)
    • 文档操作(对当前库的)

      • 查看所有文档

        • curl -X GET "http://localhost:5984/test/_all_docs";   Response:
          {"total_rows":1,"offset":0,"rows":[
          {"id":"test","key":"test","value":{"rev":"4100948714"}},
          {"id":"test2","key":"test2","value":{"rev":"107550922"}}
          ]}

      • 打开文档

        • 打开最新版本: curl-X GET "http://localhost:5984/fruit/apple?revs_info=true"; Response:
          {"_id":"apple","_rev":"2755175234","_revs_info":[{"rev":"2755175234","status":"available"}]}

        • 打开一个历史版本: curl-X GET "http://localhost:5984/survey/_design/company?rev=2543967448";Response: {"_id":"_design\/company","_rev":"2543967448"}

      • 新增(更新)文档
      • 删除文档


您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表