couchdb day nyc 2017: json documents
TRANSCRIPT
Lab: JSON Documents (30 minutes)
Bradley Holt, Developer Advocate
Thursday, February 9, 2017
CouchDB Developer Day
@BradleyHolt
JSON Documents
{
_id: "6EF9D2B0-13D3-1378-8D30-39E3CE0B36C2",
_rev: "1-0b457efcf82fb29492ef927ba5b6ee15",
type: "Feature",
geometry: {
type: "Point",
coordinates: [
-71.1028,
42.3691
]
},
properties: {
session_id: "3486b13f-7b8a-8a96-dfbf-9b82800e367f",
timestamp: 1422928591717
}
}
@BradleyHolt
http-console
$ npm install http-console -g
@BradleyHolthttps://github.com/cloudhead/http-console
http-console
$ npm install http-console -g
$ http-console 127.0.0.1:5984
@BradleyHolthttps://github.com/cloudhead/http-console
http-console
$ npm install http-console -g
$ http-console 127.0.0.1:5984
> http-console 0.6.3
> Welcome, enter .help if you're lost.
> Connecting to 127.0.0.1 on port 5984.
@BradleyHolthttps://github.com/cloudhead/http-console
Connecting to CouchDB 2.0
$ http-console root:[email protected]:5984 --json
> http-console 0.6.3
> Welcome, enter .help if you're lost.
> Connecting to 127.0.0.1 on port 5984.
@BradleyHolt
Connecting to IBM Cloudant
$ http-console https://bradley-holt:[email protected] --json
@BradleyHolt
Connecting to IBM Cloudant
$ http-console https://bradley-holt:[email protected] --json
> http-console 0.6.3
> Welcome, enter .help if you're lost.
> Connecting to bradley-holt.cloudant.com on port 443.
@BradleyHolt
PUT a Database
/>
@BradleyHolt
PUT a Database
/> PUT /kittens
@BradleyHolt
PUT a Database
/> PUT /kittens
...
@BradleyHolt
PUT a Database
/> PUT /kittens
...
HTTP/1.1 201 Created
Content-Type: application/json
Location: http://127.0.0.1/kittens
{ ok: true }
@BradleyHolt
POST a Document
/>
@BradleyHolt
POST a Document
/> /kittens
@BradleyHolt
POST a Document
/kittens>
@BradleyHolt
POST a Document
/kittens> POST /
@BradleyHolt
POST a Document
/kittens> POST /
...
@BradleyHolt
POST a Document
/kittens> POST /
... { "_id": "mittens", "age_weeks": 10, "weight_kilograms": 0.997 }
@BradleyHolt
POST a Document
/kittens> POST /
... { "_id": "mittens", "age_weeks": 10, "weight_kilograms": 0.997 }
HTTP/1.1 201 Created
Content-Type: application/json
Location: http://127.0.0.1/kittens/mittens
{
ok: true,
id: 'mittens',
rev: '1-e665a40d9ea9711c983e907f0b0b6e8a'
}
@BradleyHolt
GET All Documents
/kittens>
@BradleyHolt
GET All Documents
/kittens> GET /_all_docs
@BradleyHolt
GET All Documents
/kittens> GET /_all_docs
HTTP/1.1 200 OK
Content-Type: application/json
Etag: "92afa0f309a9fd9f140cd31ff5000b5c"
{
total_rows: 1,
offset: 0,
rows: [
{
id: 'mittens',
key: 'mittens',
value: { rev: '1-e665a40d9ea9711c983e907f0b0b6e8a' }
}
]
}@BradleyHolt
GET a Document
/kittens>
@BradleyHolt
GET a Document
/kittens> GET /mittens
@BradleyHolt
GET a Document
/kittens> GET /mittens
HTTP/1.1 200 OK
Content-Type: application/json
Etag: "1-e665a40d9ea9711c983e907f0b0b6e8a"
{
_id: 'mittens',
_rev: '1-e665a40d9ea9711c983e907f0b0b6e8a',
age_weeks: 10,
weight_kilograms: 0.997
}
@BradleyHolt
PUT an Attachment
/kittens>
@BradleyHolt
PUT an Attachment
/kittens> .headers
@BradleyHolt
PUT an Attachment
/kittens> .headers
Accept: application/json
Content-Type: application/json
Authorization: Basic cm9vdDorMi95N3Y2aA==
Host: 127.0.0.1
@BradleyHolt
PUT an Attachment
/kittens> .headers
Accept: application/json
Content-Type: application/json
Authorization: Basic cm9vdDorMi95N3Y2aA==
Host: 127.0.0.1
/kittens> Content-Type: image/gif
@BradleyHolt
PUT an Attachment
/kittens>
@BradleyHolt
PUT an Attachment
/kittens> PUT /mittens/photo?rev=1-e665a40d9ea9711c983e907f0b0b6e8a
@BradleyHolt
PUT an Attachment
/kittens> PUT /mittens/photo?rev=1-e665a40d9ea9711c983e907f0b0b6e8a
...
@BradleyHolt
PUT an Attachment
/kittens> PUT /mittens/photo?rev=1-e665a40d9ea9711c983e907f0b0b6e8a
... R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=
@BradleyHolt
PUT an Attachment
/kittens> PUT /mittens/photo?rev=1-e665a40d9ea9711c983e907f0b0b6e8a
... R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=
HTTP/1.1 201 Created
Content-Type: application/json
Location: http://127.0.0.1/kittens/mittens/photo
{
ok: true,
id: 'mittens',
rev: '2-d858e51453a5785bafe517b7eddc5a98'
}
@BradleyHolt
PUT an Attachment
/kittens> PUT /mittens/photo?rev=1-e665a40d9ea9711c983e907f0b0b6e8a
... R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=
HTTP/1.1 201 Created
Content-Type: application/json
Location: http://127.0.0.1/kittens/mittens/photo
{
ok: true,
id: 'mittens',
rev: '2-d858e51453a5785bafe517b7eddc5a98'
}
/kittens>
@BradleyHolt
PUT an Attachment
/kittens> PUT /mittens/photo?rev=1-e665a40d9ea9711c983e907f0b0b6e8a
... R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=
HTTP/1.1 201 Created
Content-Type: application/json
Location: http://127.0.0.1/kittens/mittens/photo
{
ok: true,
id: 'mittens',
rev: '2-d858e51453a5785bafe517b7eddc5a98'
}
/kittens> Content-Type: application/json
@BradleyHolt
GET an Attachment
/kittens>
@BradleyHolt
GET an Attachment
/kittens> GET /mittens/photo
@BradleyHolt
GET an Attachment
/kittens> GET /mittens/photo
HTTP/1.1 200 OK
Content-Type: image/gif
Etag: "UsqjdPnY6ApD2ENFOglFHg=="
R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=
@BradleyHolt
Conditional Caching
/kittens>
@BradleyHolt
Conditional Caching
/kittens> If-None-Match: "UsqjdPnY6ApD2ENFOglFHg=="
@BradleyHolt
Conditional Caching
/kittens> If-None-Match: "UsqjdPnY6ApD2ENFOglFHg=="
/kittens>
@BradleyHolt
Conditional Caching
/kittens> If-None-Match: "UsqjdPnY6ApD2ENFOglFHg=="
/kittens> GET /mittens/photo
@BradleyHolt
Conditional Caching
/kittens> If-None-Match: "UsqjdPnY6ApD2ENFOglFHg=="
/kittens> GET /mittens/photo
HTTP/1.1 304 Not Modified
@BradleyHolt
Conditional Caching
/kittens> If-None-Match: "UsqjdPnY6ApD2ENFOglFHg=="
/kittens> GET /mittens/photo
HTTP/1.1 304 Not Modified
/kittens>
@BradleyHolt
Conditional Caching
/kittens> If-None-Match: "UsqjdPnY6ApD2ENFOglFHg=="
/kittens> GET /mittens/photo
HTTP/1.1 304 Not Modified
/kittens> If-None-Match:
@BradleyHolt
DELETE a Document
/kittens>
@BradleyHolt
DELETE a Document
/kittens> DELETE /mittens
@BradleyHolt
DELETE a Document
/kittens> DELETE /mittens
HTTP/1.1 409 Conflict
Content-Type: application/json
{ error: 'conflict', reason: 'Document update conflict.' }
@BradleyHolt
DELETE a Document
/kittens>
@BradleyHolt
DELETE a Document
/kittens> HEAD /mittens
@BradleyHolt
DELETE a Document
/kittens> HEAD /mittens
HTTP/1.1 200 OK
Etag: "2-d858e51453a5785bafe517b7eddc5a98"
@BradleyHolt
DELETE a Document
/kittens>
@BradleyHolt
DELETE a Document
/kittens> If-Match: "2-d858e51453a5785bafe517b7eddc5a98"
@BradleyHolt
DELETE a Document
/kittens> If-Match: "2-d858e51453a5785bafe517b7eddc5a98"
/kittens>
@BradleyHolt
DELETE a Document
/kittens> If-Match: "2-d858e51453a5785bafe517b7eddc5a98"
/kittens> DELETE /mittens
@BradleyHolt
DELETE a Document
/kittens> If-Match: "2-d858e51453a5785bafe517b7eddc5a98"
/kittens> DELETE /mittens
HTTP/1.1 200 OK
Content-Type: application/json
{
ok: true,
id: 'mittens',
rev: '3-d0780627ddff7a7f536fe273100cec41'
}
@BradleyHolt
DELETE a Document
/kittens> If-Match: "2-d858e51453a5785bafe517b7eddc5a98"
/kittens> DELETE /mittens
HTTP/1.1 200 OK
Content-Type: application/json
{
ok: true,
id: 'mittens',
rev: '3-d0780627ddff7a7f536fe273100cec41'
}
/kittens>
@BradleyHolt
DELETE a Document
/kittens> If-Match: "2-d858e51453a5785bafe517b7eddc5a98"
/kittens> DELETE /mittens
HTTP/1.1 200 OK
Content-Type: application/json
{
ok: true,
id: 'mittens',
rev: '3-d0780627ddff7a7f536fe273100cec41'
}
/kittens> If-Match:
@BradleyHolt
Delete the Database
/>
@BradleyHolt
Delete the Database
/> DELETE /kittens
@BradleyHolt
Delete the Database
/> DELETE /kittens
HTTP/1.1 200 OK
Content-Type: application/json
{ ok: true }
@BradleyHolt
Try It On Your Own
1. Create a database
2. Create a document in the database
3. Read the document
4. Update the document
5. Delete the document
6. Delete the database
@BradleyHolt
Lab: JSON Documents
CouchDB Developer Day
@BradleyHolt