コマンドラインで操作
https://cloudant.com/for-developers/crud/
開発者向けドキュメントを実際にやってみる
ドキュメント内のデータ一覧を見る
$ curl https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/_all_docs
データを見てみる(id:1a80cb1cd4b37090afc0f46cdbb43ac4)
$ curl https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/1a80cb1cd4b37090afc0f46cdbb43ac4
返却値
{"_id":"1a80cb1cd4b37090afc0f46cdbb43ac4","_rev":"1-85add8f5bff234d37903d156d1285b99","season":"spring","weather":"cool with rain and sun"}
新しくデータを追加する
$ curl -d '{"season": "fall", "weather":"getting cold.."}' -X POST https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/ -H "Content-Type:application/json"
返却値
{"ok":true,"id":"ab8ec51de21e46f207c0120096bc8291","rev":"1-7cb081e4a57080cf847230ff99d089e4"}
特定のID(ab8ec51de21e46f207c0120096bc8291)のレコードを取得
$ curl -i -X HEAD https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/ab8ec51de21e46f207c0120096bc8291
返却値
E-Tagと上記rev値は同じ
HTTP/1.1 200 OK X-Couch-Request-ID: bdefc588 Server: CouchDB/1.0.2 (Erlang OTP/R14B) Etag: "1-7cb081e4a57080cf847230ff99d089e4" Date: Thu, 03 Jan 2013 07:03:49 GMT Content-Type: text/plain;charset=utf-8 Content-Length: 130 Cache-Control: must-revalidate
特定のIDのレコードを削除
$ curl -i -X DELETE https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/ab8ec51de21e46f207c0120096bc8291\?rev\=1-7cb081e4a57080cf847230ff99d089e4
返却値
HTTP/1.1 200 OK X-Couch-Request-ID: e494b619 Server: CouchDB/1.0.2 (Erlang OTP/R14B) Etag: "2-3160fe2ec8f2768c6bbe084c6c2b70f7" Date: Thu, 03 Jan 2013 07:06:53 GMT Content-Type: text/plain;charset=utf-8 Content-Length: 95 Cache-Control: must-revalidate {"ok":true,"id":"ab8ec51de21e46f207c0120096bc8291","rev":"1-7cb081e4a57080cf847230ff99d089e4"}
もしくはPUTに対して削除するフラグを付ける事で削除が可能
$ curl -d '{"_rev": "1-773b6a59e2f933059c6739df8717b44c", "_deleted":true}' -X PUT https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/ab8ec51de21e46f207c0120096bc8291
返却値
{"ok":true,"id":"ab8ec51de21e46f207c0120096bc8291","rev":"1-7cb081e4a57080cf847230ff99d089e4"}
削除されたかどうかの確認(エラー表示)
$ curl https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/ab8ec51de21e46f207c0120096bc8291
{"error":"not_found","reason":"deleted"}
認証に失敗した時
$ curl https://{アカウント名}.cloudant.com/{ドキュメント名}/ab8ec51de21e46f207c0120096bc8291
{"error":"unauthorized","reason":"_reader access is required for this request"}
一気に追加する
bulk.jsonをファイルで作成する
{"docs":[ {"name":"document-1"}, {"name":"document-2"}, {"name":"document-3"} ]}
$ curl -d @bulk.json https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/_bulk_docs -H "Content-Type:application/json"
返却値
[{"id":"32e95e4b33f172f9d03f449223054add","rev":"1-220fa148deee1e7bddb76f9dbfb9e438"},{"id":"32e95e4b33f172f9d03f449223055534","rev":"1-16afea3573a93bc9338ddb43c1ec9491"},{"id":"32e95e4b33f172f9d03f44922305563d","rev":"1-9d9ebabc84a1dd8c7b19f5b3e1feaa24"}]
ファイルの添付方法
どんなタイプのファイルでも添付可能
添付方法
- inline か standalone
inlineはデータが小さい場合によい
standaloneは、データが大きくて何度も呼び出す場合によい
mime-typeは必須。Content-Typeにて取り扱いする
インラインで追加
※inlineはデータが小さいとはいえ、コマンドラインに全部書くのは大変なので、外部ファイルにすると便利
myphoto.json
{ "_id":"myprofile", "_attachments": { "myphoto.png": { "content_type":"image\/png", "data": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAABiElEQVQYlQXBzUvbYAAH4N/7sYQkbRpTjGuJzDK/0INYd9hB8Dhhh8EY7DDYceexm7D9CWMH6al3T571IMomePDshlWY7TZs2mLatGls35rk3fOQyNn68mgwKX79sD3a0TX6bbGAo/MzHGSe4I3npdW906yVmTrkakd8HL3btHcK03idtbBWKmLW3sZqL8LYUGBhChAT0NDV/aprAlQRbxdmY0PlsZ0x4lfzbmzOuaI1ZwIPg5BWXqzTT4TgpeWwnELZVe2S3TT+sLDfZ0EsWVRyAHQo/ew4BIaNZ7IH0W2i43fBOUPt1wXuhCBJ0QbQBi+PfPi6ju/9IfzCPDZXTNgsgaYqcINUyl4EAOB3po6kdYMfMwtkVTKiC4HBMJBM19AgkuxuLOF57j04OE3SeAAwK5mEkaxPRkjugX/tFo77URLkDVZZL6cchGa9pyU4rWtlX2M4N1SUrQx+Dw0E1ye8lF8Gv480TsbjGoiKiHVDK/DYzwdHXvz1MEMS5B4X0nqvk0dw2/wPAziepZ5qttMAAAAASUVORK5CYII=" } } }
$ curl -d @myphoto.json -X POST https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/ -H "Content-Type:application/json
返却値
"{"ok":true,"id":"myprofile","rev":"1-2b0a2ad6d1ba8a4ec811aa67ccb30db1"}
追加されたかどうか再度確認
$ curl https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/myprofile
返却値
{"_id":"myprofile","_rev":"1-2b0a2ad6d1ba8a4ec811aa67ccb30db1","_attachments":{"myphoto.png":{"content_type":"image\/png"," revpos":1,"digest":"md5-VY\/bvWh3RCG0BNObBVlMGw==","length":449,"stub":true}}}
バイナリーデータのまま追加する
画像ファイルが例えばtest.pngとすると
$ curl -H "Content-Type: image/png" -X PUT --data-binary @test.png https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/test/picture.png
返却値
{"ok":true,"id":"test","rev":"1-495147af493705593ca20bd47a57f55d"} ||< 確認する >|sh| $ curl https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/test
返却値
{"_id":"test","_rev":"1-495147af493705593ca20bd47a57f55d","_attachments":{"picture.png":{"content_type":"image\/png","revpos":1,"digest":"md5-JRYzmXDXEIGVhfkHc66+Cg==","length":12799,"stub":true}}}
追加済みのドキュメントに新しく追加する場合
movie.txtをtestドキュメントに追加(PUT)
$ curl -H "Referer: https://{アカウント名}.cloudant.com" -H "Content-Type: text/plain" -X PUT --data-binary @movie.txt https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/test/movie.txt?rev=1-495147af493705593ca20bd47a57f55d
返却値
{"ok":true,"id":"test","rev":"2-2cd8278133b20af9aa974652d08097d1"}
確認
$ curl https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/test
返却値
{ "_id":"test", "_rev":"2-2cd8278133b20af9aa974652d08097d1", "_attachments": { "movie.txt": {"content_type":"text\/plain","revpos":2,"digest":"md5-PjtfW8YfeSD1QpOxcPGClA==","length":24,"stub":true}, "picture.png": {"content_type":"image\/png","revpos":1,"digest":"md5-JRYzmXDXEIGVhfkHc66+Cg==","length":12799,"stub":true} } }
movie2.txtをtestドキュメントに追加(POST)
$ curl -H "Referer: https://{アカウント名}.cloudant.com" -H "Content-Type: multipart/form-data" -X POST -F "_attachments=@movie2.txt" -F '_rev=3-94b808999da47c1cc5c360217d8913c8' https://{ユーザー名}:{パスワード}@{アカウント名}.cloudant.com/{ドキュメント名}/test
返却値
{"ok":true,"id":"test","rev":"4-33d32c8f6e0378b3ef9b1ad27c305429"}