CouchDB - その2 (Core API)

#relaxonメモ(ずいぶん時間があいてしまいましたが、relaxonの初心者用レクチャのメモを追加しました。)

Core APIをいろいろ確かめました。以下はレクチャ中に参照したドキュメントです。
http://books.couchdb.org/relax/intro/core-api

まずはFutonを起動します。今回はMacBookにローカルサービスとしてインストールしたので、

 http://localhost:5984/_utils

にブラウザでアクセスします。これがFutonのトップのアドレスです。
(ちなみに http://localhost:5984/ は以下のJSONが返ってきます。 {"couchdb":"Welcome","version":"0.10.1"})
FireBugを起動しながらの見た目はこんな感じになります。



画面上部はCouchDB内にすでに存在するデータベースの名前とサイズ、ドキュメント数、バージョン数が表示されている。右側にはメニューが表示されています。

1.データベースの作成


1.Futonで作成
 
"Create Database"ボタンを押すと、以下のようなダイアログが開くのでデータベース名をつけて"Create"します。



2.curlで作成

ターミナルからcurlコマンドでデータベースをPUTすることもできます。
データベース自体もPUTできちゃうんですね。
curl -v -X PUT http://localhost:5984/database1
すると、{"ok":true}と返ってきます。

作成したデータベースのURLをGETするとデータベースのステータスが
帰ってきます。
curl -v -X GET http://localhost:5984/database1
{"db_name":"database1","doc_count":7,"doc_del_count":0,"update_seq":8,"....

※curl の -v オプションをつけるとレスポンスヘッダを表示します。


2.ドキュメントの追加


1.Futonで作成
 
Overviewからデータベースをどれか選択し、"New Document"をクリックします。するとIDが振られたドキュメントのエントリが表示されます。Save Documentをクリックするまではドキュメントは作成されません。



add Fieldをクリックすると、ドキュメントに属性を追加することができます。



注意点としては、valueはJSON記法で書くこと。引用符を忘れると追加JSON parse errorになります。
逆に言えばJSONであれば、配列や階層構造も書けます。

最後にSave Documentをクリックするとドキュメントが作成されます。
ドキュメントを作成すると、rev_というリビジョンを表す属性が追加されます。

 _rev : "1-87a1d37102ddc9a84b351af8e6c57284"

_rev値のハイフンより前は、更新があると数字が増加します。ハイフンより後はドキュメントの内容から作られたハッシュ値になっています。またレスポンスヘッダに含まれるEtagは_revの値とおなじになっています。

2.curlで作成

ターミナルからcurlコマンドでドキュメントをPUTすることもできます。
curl -v -X PUT http://localhost:5984/id12345 -d '{"attr" : "value"}'
201 Createdが返ってきます。

また、ファイルに保存したJSONをPOSTすることもできます。以下はnew_document.json
というファイルに保存したJSONをPOSTする例です。
curl -v -X POST --data @new_document.json http://localhost:5984/database1
こちらも 201 Createdが返ってきます。

3.ドキュメントの変更

1.Futonから変更

Futonでの操作は省略します。ドキュメントの各属性をダブルクリックして編集するだけなので。
変更されたドキュメントは"Previous Version"を見ることができます。

2.curlで変更

まず、変更したいドキュメントをGETしてファイルに入れておきます。
curl -v -X GET http://localhost:5984/database1/id12345 > id12345.json
その後にファイルの内容を変更してPUTします。
curl -v -X PUT --data @id12345.json http://localhost:5984/database1/id12345
ここで、GETした時と同じ_revをつけてPUTするのが重要です。もし、_revの値を
変更して、PUTすると

HTTP/1.1 409 Conflict
{"error":"conflict","reason":"Document update conflict."}

が返ってきます。

4.ドキュメントの削除


1.Futonから削除

Futonでの操作は省略します。Deleteをクリックするだけなので。

2.curlから削除

単にURLに対して、DELETEを実行するだけではダメです。以下のようにrevパラメータをつけてDELETEします。
curl -v -X DELETE http://localhost:5984/database1/id12345?rev=2-7051cbe5c8faecd085a3fa619e6e6337
200 OKが返ってきます。

CouchDBはCompactする前までは、古いリビジョンが残っているので、
以下のようにrevパラメータをつけてGETすれば、DELETEしたドキュメントも
取得可能です。
curl -v -X GET http://localhost:5984/database1/id12345?rev=2-7051cbe5c8faecd085a3fa619e6e6337

また、"deleted" : "true"を含んだドキュメントをPUTしても同じように削除することができます。

(つづく)