couchdb day nyc 2017: json documents

65
Lab: JSON Documents (30 minutes) Bradley Holt, Developer Advocate Thursday, February 9, 2017 CouchDB Developer Day @BradleyHolt

Upload: ibm-cloud-data-services

Post on 22-Jan-2018

151 views

Category:

Software


3 download

TRANSCRIPT

Page 1: CouchDB Day NYC 2017: JSON Documents

Lab: JSON Documents (30 minutes)

Bradley Holt, Developer Advocate

Thursday, February 9, 2017

CouchDB Developer Day

@BradleyHolt

Page 2: CouchDB Day NYC 2017: JSON Documents

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

Page 3: CouchDB Day NYC 2017: JSON Documents

http-console

$ npm install http-console -g

@BradleyHolthttps://github.com/cloudhead/http-console

Page 4: CouchDB Day NYC 2017: JSON Documents

http-console

$ npm install http-console -g

$ http-console 127.0.0.1:5984

@BradleyHolthttps://github.com/cloudhead/http-console

Page 5: CouchDB Day NYC 2017: JSON Documents

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

Page 6: CouchDB Day NYC 2017: JSON Documents

Connecting to CouchDB 2.0

$ http-console root:[email protected]:5984 --json

@BradleyHolt

Page 7: CouchDB Day NYC 2017: JSON Documents

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

Page 8: CouchDB Day NYC 2017: JSON Documents

Connecting to IBM Cloudant

$ http-console https://bradley-holt:[email protected] --json

@BradleyHolt

Page 9: CouchDB Day NYC 2017: JSON Documents

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

Page 10: CouchDB Day NYC 2017: JSON Documents

PUT a Database

/>

@BradleyHolt

Page 11: CouchDB Day NYC 2017: JSON Documents

PUT a Database

/> PUT /kittens

@BradleyHolt

Page 12: CouchDB Day NYC 2017: JSON Documents

PUT a Database

/> PUT /kittens

...

@BradleyHolt

Page 13: CouchDB Day NYC 2017: JSON Documents

PUT a Database

/> PUT /kittens

...

HTTP/1.1 201 Created

Content-Type: application/json

Location: http://127.0.0.1/kittens

{ ok: true }

@BradleyHolt

Page 14: CouchDB Day NYC 2017: JSON Documents

POST a Document

/>

@BradleyHolt

Page 15: CouchDB Day NYC 2017: JSON Documents

POST a Document

/> /kittens

@BradleyHolt

Page 16: CouchDB Day NYC 2017: JSON Documents

POST a Document

/kittens>

@BradleyHolt

Page 17: CouchDB Day NYC 2017: JSON Documents

POST a Document

/kittens> POST /

@BradleyHolt

Page 18: CouchDB Day NYC 2017: JSON Documents

POST a Document

/kittens> POST /

...

@BradleyHolt

Page 19: CouchDB Day NYC 2017: JSON Documents

POST a Document

/kittens> POST /

... { "_id": "mittens", "age_weeks": 10, "weight_kilograms": 0.997 }

@BradleyHolt

Page 20: CouchDB Day NYC 2017: JSON Documents

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

Page 21: CouchDB Day NYC 2017: JSON Documents

GET All Documents

/kittens>

@BradleyHolt

Page 22: CouchDB Day NYC 2017: JSON Documents

GET All Documents

/kittens> GET /_all_docs

@BradleyHolt

Page 23: CouchDB Day NYC 2017: JSON Documents

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

Page 24: CouchDB Day NYC 2017: JSON Documents

GET a Document

/kittens>

@BradleyHolt

Page 25: CouchDB Day NYC 2017: JSON Documents

GET a Document

/kittens> GET /mittens

@BradleyHolt

Page 26: CouchDB Day NYC 2017: JSON Documents

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

Page 27: CouchDB Day NYC 2017: JSON Documents

PUT an Attachment

/kittens>

@BradleyHolt

Page 28: CouchDB Day NYC 2017: JSON Documents

PUT an Attachment

/kittens> .headers

@BradleyHolt

Page 29: CouchDB Day NYC 2017: JSON Documents

PUT an Attachment

/kittens> .headers

Accept: application/json

Content-Type: application/json

Authorization: Basic cm9vdDorMi95N3Y2aA==

Host: 127.0.0.1

@BradleyHolt

Page 30: CouchDB Day NYC 2017: JSON Documents

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

Page 31: CouchDB Day NYC 2017: JSON Documents

PUT an Attachment

/kittens>

@BradleyHolt

Page 32: CouchDB Day NYC 2017: JSON Documents

PUT an Attachment

/kittens> PUT /mittens/photo?rev=1-e665a40d9ea9711c983e907f0b0b6e8a

@BradleyHolt

Page 33: CouchDB Day NYC 2017: JSON Documents

PUT an Attachment

/kittens> PUT /mittens/photo?rev=1-e665a40d9ea9711c983e907f0b0b6e8a

...

@BradleyHolt

Page 34: CouchDB Day NYC 2017: JSON Documents

PUT an Attachment

/kittens> PUT /mittens/photo?rev=1-e665a40d9ea9711c983e907f0b0b6e8a

... R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=

@BradleyHolt

Page 35: CouchDB Day NYC 2017: JSON Documents

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

Page 36: CouchDB Day NYC 2017: JSON Documents

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

Page 37: CouchDB Day NYC 2017: JSON Documents

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

Page 38: CouchDB Day NYC 2017: JSON Documents

GET an Attachment

/kittens>

@BradleyHolt

Page 39: CouchDB Day NYC 2017: JSON Documents

GET an Attachment

/kittens> GET /mittens/photo

@BradleyHolt

Page 40: CouchDB Day NYC 2017: JSON Documents

GET an Attachment

/kittens> GET /mittens/photo

HTTP/1.1 200 OK

Content-Type: image/gif

Etag: "UsqjdPnY6ApD2ENFOglFHg=="

R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=

@BradleyHolt

Page 41: CouchDB Day NYC 2017: JSON Documents

Conditional Caching

/kittens>

@BradleyHolt

Page 42: CouchDB Day NYC 2017: JSON Documents

Conditional Caching

/kittens> If-None-Match: "UsqjdPnY6ApD2ENFOglFHg=="

@BradleyHolt

Page 43: CouchDB Day NYC 2017: JSON Documents

Conditional Caching

/kittens> If-None-Match: "UsqjdPnY6ApD2ENFOglFHg=="

/kittens>

@BradleyHolt

Page 44: CouchDB Day NYC 2017: JSON Documents

Conditional Caching

/kittens> If-None-Match: "UsqjdPnY6ApD2ENFOglFHg=="

/kittens> GET /mittens/photo

@BradleyHolt

Page 45: CouchDB Day NYC 2017: JSON Documents

Conditional Caching

/kittens> If-None-Match: "UsqjdPnY6ApD2ENFOglFHg=="

/kittens> GET /mittens/photo

HTTP/1.1 304 Not Modified

@BradleyHolt

Page 46: CouchDB Day NYC 2017: JSON Documents

Conditional Caching

/kittens> If-None-Match: "UsqjdPnY6ApD2ENFOglFHg=="

/kittens> GET /mittens/photo

HTTP/1.1 304 Not Modified

/kittens>

@BradleyHolt

Page 47: CouchDB Day NYC 2017: JSON Documents

Conditional Caching

/kittens> If-None-Match: "UsqjdPnY6ApD2ENFOglFHg=="

/kittens> GET /mittens/photo

HTTP/1.1 304 Not Modified

/kittens> If-None-Match:

@BradleyHolt

Page 48: CouchDB Day NYC 2017: JSON Documents

DELETE a Document

/kittens>

@BradleyHolt

Page 49: CouchDB Day NYC 2017: JSON Documents

DELETE a Document

/kittens> DELETE /mittens

@BradleyHolt

Page 50: CouchDB Day NYC 2017: JSON Documents

DELETE a Document

/kittens> DELETE /mittens

HTTP/1.1 409 Conflict

Content-Type: application/json

{ error: 'conflict', reason: 'Document update conflict.' }

@BradleyHolt

Page 51: CouchDB Day NYC 2017: JSON Documents

DELETE a Document

/kittens>

@BradleyHolt

Page 52: CouchDB Day NYC 2017: JSON Documents

DELETE a Document

/kittens> HEAD /mittens

@BradleyHolt

Page 53: CouchDB Day NYC 2017: JSON Documents

DELETE a Document

/kittens> HEAD /mittens

HTTP/1.1 200 OK

Etag: "2-d858e51453a5785bafe517b7eddc5a98"

@BradleyHolt

Page 54: CouchDB Day NYC 2017: JSON Documents

DELETE a Document

/kittens>

@BradleyHolt

Page 55: CouchDB Day NYC 2017: JSON Documents

DELETE a Document

/kittens> If-Match: "2-d858e51453a5785bafe517b7eddc5a98"

@BradleyHolt

Page 56: CouchDB Day NYC 2017: JSON Documents

DELETE a Document

/kittens> If-Match: "2-d858e51453a5785bafe517b7eddc5a98"

/kittens>

@BradleyHolt

Page 57: CouchDB Day NYC 2017: JSON Documents

DELETE a Document

/kittens> If-Match: "2-d858e51453a5785bafe517b7eddc5a98"

/kittens> DELETE /mittens

@BradleyHolt

Page 58: CouchDB Day NYC 2017: JSON Documents

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

Page 59: CouchDB Day NYC 2017: JSON Documents

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

Page 60: CouchDB Day NYC 2017: JSON Documents

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

Page 61: CouchDB Day NYC 2017: JSON Documents

Delete the Database

/>

@BradleyHolt

Page 62: CouchDB Day NYC 2017: JSON Documents

Delete the Database

/> DELETE /kittens

@BradleyHolt

Page 63: CouchDB Day NYC 2017: JSON Documents

Delete the Database

/> DELETE /kittens

HTTP/1.1 200 OK

Content-Type: application/json

{ ok: true }

@BradleyHolt

Page 64: CouchDB Day NYC 2017: JSON Documents

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

Page 65: CouchDB Day NYC 2017: JSON Documents

Lab: JSON Documents

CouchDB Developer Day

@BradleyHolt