コマンドラインで操作

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"}