mongodb and rest apis a match made in heaven … · mongodb & rest apis a match made in heaven....

152
Good Morning Percona Live Amsterdam 2015

Upload: hadat

Post on 30-Jul-2018

252 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Good MorningPercona Live Amsterdam 2015

Page 2: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Who Am Ifighting back against impostor syndrome

Page 3: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Nicola IarocciCo-founder and CTO at CIR 2000

Page 4: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Nicola IarocciMongoDB Master

Page 5: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Nicola IarocciOpen Source junkie

Eve • Cerberus • Events • Flask-Sentinel • Eve.NET • Etc.

Page 6: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Nicola IarocciConsultant

Mongo • RESTful Services • Python • My Open Source Projects

Page 7: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Nicola IarocciCoderDojo

Coding Clubs for Kids

Page 8: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

MongoDB & REST APIsA Match Made in Heaven

Page 9: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Agenda

Page 10: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Agenda1. Our use case for a RESTful API

Page 11: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Agenda2. What is a RESTful API and why we need it

Page 12: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Agenda3. Why MongoDB is a good match for RESTful Services

Page 13: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Agenda4. Build and run a MongoDB RESTful Service from scratch, live on stage.

Page 14: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Agenda5. Stories from the field (if there’s any time left, which I doubt)

Page 15: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

The Casefor RESTful Web APIs

Page 16: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Amica 10invoicing & accounting for italian small businesses

Page 17: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

your old school desktop app

Page 18: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

what we started with

Client

LAN/SQL

Database

DesktopApplication

Page 19: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

GoalA remote service that client apps can leverage to stay in sync withc each other

Page 20: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

What we need #1Must be accessible by any kind of client technology

Page 21: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

What we need #2Abstract the data access layer

so we can update/replace the engine at any time with no impact on clients

Page 22: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

What we need #3An appropriate data storage engine

Page 23: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

What we need #4Easily (re)deployable and scalable multi-micro-service architecure

Page 24: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Where we want to go

Clients

“Cloud”

Database

RESTful Web API

APIiOS

Android

Website

Desktop Client

? ?

Page 25: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Constraints• minimum viable product first

• add features over time

• frequent database schema updates

• easily scalable

• avoid downtime as much as possible

• cater upfront for a microservices architecture

Page 26: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

RESTSo What Is REST All About?

Page 27: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

REST is not a standard

Page 28: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

REST is not a protocol

Page 29: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

REST is an architectural stylefor networked applications

Page 30: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Defines a set of simple principlesloosely followed by most API implementations

Page 31: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

“resource”the source of a specific information

Page 32: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

A web page is not a resourcerather the representation of a resource

Page 33: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

“global permanent identifier”every resource is uniquely identified. Think a HTTP URI.

Page 34: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

#3 standard interface

used to exchange representations of resources (think the HTTP protocol)

Page 35: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

“a set of constraints”separation of concerns, stateless, cacheability, layered system, uniform interface, etc.

Page 36: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Web is built on RESTand it is meant to be consumed by humans

Page 37: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

RESTful APIs are built on RESTand are meant to be consumed by machines

Page 38: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Representational State Transfer (REST)by Roy Thomas Fielding

http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

Page 39: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Goals #1 and #2 are metREST layer allows all kinds of client technologies and abstracts the data away

Page 40: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

MongoDB and RESTOr why we picked MongoDB for our REST API

Page 41: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

JSON transportMost REST services and clients produce and consume use JSON

Page 42: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

JSON-style data storeMongoDB stores data as Binary JSON

Page 43: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

JSON & RESTful API

JSONaccepted media type

Client

JSON(BSON)

Mongo

GET

maybe we can push directly to client?

Page 44: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

JSON & RESTful API

JSONaccepted media type

Client

JSON(BSON)

Mongo

JSONsubset of python dict

(kinda)

API

GET

almost.

Page 45: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

JSON & RESTful API

JSONobjects

Client

JSON(BSON)

Mongo

JSON/dictmaps to python dict

(validation layer)

API

POST

also works when sending data the database

Page 46: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Similarity with RDBMSmakes NoSQL easy to grasp (even for a sql head like me)

Page 47: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

TerminologyRDBMS Mongo

Database Database

Table Collection

Rows(s) JSON Document

Index Index

Join Embedding & Linking

Page 48: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

What about Queries?Queries in MongoDB are represented as JSON-style objects

db.things.find({x: 3, y: "foo”});

Page 49: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Filtering and Sorting

nativeMongoquery syntax

Client

JSON(BSON)

Mongo

(very) thin parsing

& validation layer

API

Expose the native MongoDB syntax?

?where={“x”: 3, “y”: “foo”}

Page 50: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

JSON all along the pipelinemapping to and from the database feels more natural

Page 51: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

No need for ORMNo need to map objects to JSON and vice-versa (win!)

Page 52: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

schema-lessdynamic documents allow for painless evolution

Page 53: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

REST is statelessMongoDB lacks transactions

Page 54: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Ideal API SurfaceMongo collection maps to API resource endpoint

api.example.com/contacts

Maps to a Mongo collection

Page 55: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Ideal API SurfaceMongo document maps to a API document endpoint

api.example.com/contacts/4f46445fc88e201858000000

Maps to a collection ObjectID

Page 56: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Goal #3 is metAn appropriate data storage engine: MongoDB

Page 57: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Eve REST API for Humans™

Free and Open Source Powered by MongoDB and Good Intentions

eve

Page 58: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Philosopyeffortlessly build and deploy highly customizable, fully featured

RESTful Web Services

Page 59: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Quickstart

Page 60: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

install$ pip install eve

Page 61: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

run.pyfrom eve import Eveapp = Eve()

if __name__ == '__main__':app.run()

Page 62: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py# just a couple API endpoints with no custom schema or rules.

DOMAIN = {‘people’: {}‘works’: {}

}

Page 63: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

launch$ python run.py* Running on http://127.0.0.1:5000/

Page 64: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

enjoy

HATEOAS AT WORK HERE

$ curl http://localhost:5000/people

{"_items": [],"_links": {"self": {"href": "people", "title": "people"},"parent": {“href": "/", "title": "home"},

},"_meta": {"max_results": 25,

"total": 0, "page": 1 }}

Page 65: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

enjoy

CLIENTS CAN EXPLORE THE API PROGRAMMATICALLY

$ curl http://localhost:5000/people

{"_items": [],"_links": {"self": {"href": "people", "title": "people"},"parent": {“href": "/", "title": “home”}

},"_meta": {"max_results": 25,

"total": 0, "page": 1}}

Page 66: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

$ curl http://localhost:5000/people

{"_items": [],"_links": {"self": {"href": "people", "title": "people"},"parent": {“href": "/", "title": "home"},

},"_meta": {"max_results": 25,

"total": 0, "page": 1 }}

enjoy

AND EVENTUALLY FILL THE UI

Page 67: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

enjoy$ curl http://localhost:5000/people

{"_items": [],"_links": {"self": {"href": "people", "title": "people"},"parent": {“href": "/", "title": "home"},

},"_meta": {"max_results": 25,

"total": 0, "page": 1 }}

PAGINATION DATA

Page 68: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

enjoy

EMTPY RESOURCE AS WE DID NOT

CONNECT A DATASOURCE

$ curl http://localhost:5000/people

{"_items": [],"_links": {"self": {"href": "people", "title": "people"},"parent": {“href": "/", "title": "home"},

},"_meta": {"max_results": 25,

"total": 0, "page": 1 }}

Page 69: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py# let’s connect to a mongo instance

MONGO_HOST = 'localhost'MONGO_PORT = 27017MONGO_USERNAME = 'user'MONGO_PASSWORD = 'user'MONGO_DBNAME = 'percona'

Page 70: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py# let’s also add a few validation rulesDOMAIN['people']['schema'] = { 'name': {'type': 'string’,'maxlength': 50,'unique': True},

'email': {'type': 'string','regex': '^\S+@\S+$'},

'location': {'type': 'dict','schema': {'address': {'type': 'string'},'city': {'type': 'string’}}},

'born': {'type': 'datetime'}}

UNIQUE STRING, MAX LENGTH 50

Page 71: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py# let’s also add a few validation rulesDOMAIN['people']['schema'] = { 'name': {'type': 'string','maxlength': 50,'unique': True},

'email': {'type': 'string','regex': '^\S+@\S+$'},

'location': {'type': 'dict','schema': {'address': {'type': 'string'},'city': {'type': 'string’}}},

'born': {'type': 'datetime'}}

ONLY ACCEPT VALID EMAILS

Page 72: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py# let’s also add a few validation rulesDOMAIN['people']['schema'] = { 'name': {'type': 'string’,'maxlength': 50,'unique': True},

'email': {'type': 'string','regex': '^\S+@\S+$'},

'location': {'type': 'dict','schema': {'address': {'type': 'string'},'city': {'type': 'string’}}},

'born': {'type': 'datetime'}}

THIS REGEX SUCKS!DON’T USE

IN PRODUCTION

Page 73: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py# let’s also add a few validation rulesDOMAIN['people']['schema'] = { 'name': {'type': 'string','maxlength': 50,'unique': True},

'email': {'type': 'string','regex': '^\S+@\S+$'},

'location': {'type': 'dict','schema': {'address': {'type': 'string'},'city': {'type': 'string’}}},

'born': {'type': 'datetime'}}

SUBDOCUMENT WITH 2 STRING FIELDS

Page 74: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py# let’s also add a few validation rulesDOMAIN['people']['schema'] = { 'name': {'type': 'string’,'maxlength': 50,'unique': True},

'email': {'type': 'string','regex': '^\S+@\S+$'},

'location': {'type': 'dict','schema': {'address': {'type': 'string'},'city': {'type': 'string’}}},

'born': {'type': 'datetime'}}

ONLY ACCEPT DATETIME VALUES

Page 75: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py# allow write access to API endpoints# (default is [‘GET’] for both settings)

# /peopleRESOURCE_METHODS = ['GET','POST']

# /people/<id>ITEM_METHODS = ['GET','PATCH','PUT','DELETE']

ADD/CREATE ONE OR MORE ITEMS

Page 76: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py# allow write access to API endpoints# (default is [‘GET’] for both settings)

# /peopleRESOURCE_METHODS = ['GET','POST']

# /people/<id>ITEM_METHODS = ['GET','PATCH','PUT','DELETE']

EDIT ITEM

Page 77: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py# allow write access to API endpoints# (default is [‘GET’] for both settings)

# /peopleRESOURCE_METHODS = ['GET','POST']

# /people/<id>ITEM_METHODS = ['GET','PATCH','PUT','DELETE']

REPLACE ITEM

Page 78: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py# allow write access to API endpoints# (default is [‘GET’] for both settings)

# /peopleRESOURCE_METHODS = ['GET','POST']

# /people/<id>ITEM_METHODS = ['GET','PATCH','PUT','DELETE']

YOU GUESSED IT

Page 79: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py

CLIENT UI

# a few optional config options

DOMAIN['people'].update({'item_title': 'person','cache_control':'max-age=10,must-revalidate','cache_expires': 10,'additional_lookup': {'url’: 'regex("[\w]+")','field’: 'name'}

}}

)

Page 80: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py

CLIENT CACHE OPTIONS

# a few optional config options

DOMAIN['people'].update({'item_title': 'person','cache_control':'max-age=10,must-revalidate','cache_expires': 10,'additional_lookup': {'url’: 'regex("[\w]+")','field’: 'name'}

}}

)

Page 81: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py

ALTERNATE ENDPOINT

# a few optional config options

DOMAIN['people'].update({'item_title': 'person','cache_control':'max-age=10,must-revalidate','cache_expires': 10,'additional_lookup': {'url’: 'regex("[\w]+")','field’: 'name'}

}}

)

Page 82: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Features OverviewWe are going to focus on MongoDB power-ups

Page 83: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

full range of CRUD operationsCreate/POST

Read/GET Update/PATCH and Replace/PUT

Delete/DELETE

Page 84: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

filters, mongo style?where={“name”: “john”}

Page 85: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

filters, the python way?where=name==john

Page 86: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

sorting?sort=city,-name

SORT BY CITY, THEN NAME DESCENDING

Page 87: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

projections?projection={"avatar": 0}

RETURN ALL FIELDS BUT ‘AVATAR’

Page 88: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

projections?projection={"lastname": 1}

ONLY RETURN ‘LASTNAME’

Page 89: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

pagination?max_results=20&page=2

MAX 20 RESULTS PER PAGE; PAGE 2

Page 90: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

GeoJSONsupport and validation for all GeoJSON types

Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, GeometricalCollection

Page 91: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

document embeddingjoins

Page 92: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

standard request$ curl example.com/works/<id>

{ "title": "Book Title", "description": "book description", "author": “52da465a5610320002660f94"

}RAW FOREIGN KEY

(DEFAULT)

Page 93: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

request an embedded document$ curl example.com/works/<id>?embedded={“author”: 1}

{ "title": "Book Title", "description": "book description", "author": {

“firstname”: “Mark”, “lastname”: “Green”,

} }

REQUEST EMBEDDED AUTHOR

Page 94: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

embedded document$ curl example.com/works/<id>?embedded={“author”: 1}

{ "title": "Book Title", "description": "book description", "author": {

“firstname”: “Mark”, “lastname”: “Green”,

} }

# embedding is configurable on per-field basis and# can be pre-set by API maintainer

EMBEDDED DOCUMENT

Page 95: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

bulk insertsinsert multiple documents with a single request

Page 96: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

request$ curl -d ‘

[{

"firstname": "barack", "lastname": “obama"

}, {

"firstname": "mitt", "lastname": “romney”

}]' -H 'Content-Type: application/json’ <url>

Page 97: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

response[ { "_status": "OK", "_updated": "Thu, 22 Nov 2012 15:22:27 GMT", "_id": "50ae43339fa12500024def5b", "_etag": "749093d334ebd05cf7f2b7dbfb7868605578db2c" "_links": {"self": {"href": “<url>”, "title": "person"}} }, { "_status": "OK", "_updated": "Thu, 22 Nov 2012 15:22:27 GMT", "_id": "50ae43339fa12500024def5c", "_etag": "62d356f623c7d9dc864ffa5facc47dced4ba6907" "_links": {"self": {"href": “<url>", "title": "person"}} }] COHERENCE MODE OFF: ONLY META FIELDS ARE RETURNED

Page 98: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

response[ { "_status": "OK", "_updated": "Thu, 22 Nov 2012 15:22:27 GMT", "_id": "50ae43339fa12500024def5b", "_etag": "749093d334ebd05cf7f2b7dbfb7868605578db2c" "_links": {"self": {"href": “<url>”, "title": “person”}}, "firstname": "barack", "lastname": "obama",

}, { "_status": "OK", "_updated": "Thu, 22 Nov 2012 15:22:27 GMT", "_id": "50ae43339fa12500024def5c", "_etag": "62d356f623c7d9dc864ffa5facc47dced4ba6907" "_links": {"self": {"href": “<url>", "title": "person"}} "firstname": "mitt", "lastname": "romney", }]

COHERENCE MODE ON: ALL FIELDS RETURNED

Page 99: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

document versioning?version=3

?version=all?version=diffs

Page 100: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

soft deletespreserve deleted documents and retrieve them with a simple

?show_deleted

Page 101: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

file storagefiles are stored in GridFS by default; customizable for S3, file system, etc.

Page 102: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

data validationpowerful and extensible data validation powered by Cerberus

Page 103: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

rich validation grammarreferentrial integrity / unique values / defaults / regex / etc.

Page 104: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

custom data typescreate your own data types to validate against

Page 105: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

custom validation logicextended the validation system to cater for specific use cases

Page 106: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

multi databaseserve endpoints and/or users from dedicated mongos

Page 107: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

index maintenancedefine sets of resource indexes to be (re)created at launch

supports sparse, geo2d and background indexes

Page 108: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

event hooksplug custom actions in the request/response cycle

Page 109: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

run.pyfrom eve import Eveapp = Eve()

def percona(resource, response):documents = response['_items'] for document in documents: document['percona'] = 'is so cool!'

if __name__ == '__main__':app.on_fetched_resource += percona_liveapp.run()

CALLBACK FUNCTION

Page 110: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

run.pyfrom eve import Eveapp = Eve()

def percona(resource, response):documents = response['_items'] for document in documents: document['percona'] = 'is so cool!'

if __name__ == '__main__':app.on_fetched_resource += percona_liveapp.run()

LOOP ON ALL DOCUMENTS

Page 111: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

run.pyfrom eve import Eveapp = Eve()

def percona(resource, response):documents = response['_items'] for document in documents: document['percona'] = 'is so cool!'

if __name__ == '__main__':app.on_fetched_resource += percona_liveapp.run()

INJIECT FIELD

Page 112: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

run.pyfrom eve import Eveapp = Eve()

def percona(resource, response):documents = response['_items'] for document in documents: document['percona'] = 'is so cool!'

if __name__ == '__main__':app.on_fetched_resource += percona_liveapp.run()

ATTACH CALLBACK TO EVENT HOOK

Page 113: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

rate limitingpowered

Page 114: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

settings.py# Rate limit on GET requests:

RATE_LIMIT_GET = (1, 60)

ONE REQUEST PER MINUTE (CLIENT)

Page 115: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

$ curl -i <url>

HTTP/1.1 200 OKX-RateLimit-Limit: 1X-RateLimit-Remaining: 0X-RateLimit-Reset: 1390486659

rate limited request

CURRENT LIMIT

Page 116: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

$ curl -i <url>

HTTP/1.1 200 OKX-RateLimit-Limit: 1X-RateLimit-Remaining: 0X-RateLimit-Reset: 1390486659

rate limited request

REMAINING

Page 117: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

$ curl -i <url>

HTTP/1.1 200 OKX-RateLimit-Limit: 1X-RateLimit-Remaining: 0X-RateLimit-Reset: 1390486659

rate limited request

TIME TO RESET

Page 118: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

$ curl -i <url>

HTTP/1.1 429 TOO MANY REQUESTS

rate limited request

OUCH!

Page 119: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

operations loglog all operations and eventually expose a dedicated endpoint

Page 120: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

HATEOASHypermedia As Engine Of The Application State

Page 121: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

XML support$ curl -H ”Accept: application/xml” -i http://example.com/people

<resource href="people" title="people" ><link rel="parent" href="/" title="home" /><resource href="people/55fc149138345b0880f07e3d" title="person" >

<_created>Fri, 18 Sep 2015 13:41:37 GMT</_created> <_etag>5d057712ce792ebb4100b96aa98bfe9b6693c07b</_etag> <_id>55fc149138345b0880f07e3d</_id> <_updated>Fri, 18 Sep 2015 13:41:37 GMT</_updated>

<email>[email protected]</email> <name>john</name></resource>

</resource>

Page 122: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

conditional requestsallow clients to only request non-cached content

Page 123: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

If-Modified-SinceIf-Modified-Since: Wed, 05 Dec 2012 09:53:07 GMT

ONLY RETURN DOCUMENT IF MODIFIED SINCE

Page 124: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

If-None-MatchIf-None-Match:1234567890123456789012345678901234567890

>

ONLY RETURN DOCUMENT ETAG CHANGED

Page 125: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

data integrity and concurrencyno overwriting documents with obsolete versions

Page 126: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

missing ETag# fails, as there is no ETag included with request

$ curl \-X PATCH \-i http://example.com/people/521d6840c437dc0002d1203c \-H "Content-Type: application/json" \-d '{"name": “ronald"}'

HTTP/1.1 403 FORBIDDEN NO ETAG

REJECTED

Page 127: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

ETag mismatch# fails, as ETag does not match with server

$ curl \-X PATCH \-i http://example.com/people/521d6840c437dc0002d1203c \-H "If-Match: 1234567890123456789012345678901234567890" \-H "Content-Type: application/json” \-d '{"firstname": "ronald"}'

HTTP/1.1 412 PRECONDITION FAILED

ETAG MISMATCH

REJECTED

Page 128: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

valid ETag# success at last! ETag matches with server

$ curl \-X PATCH \-i http://example.com/people/50adfa4038345b1049c88a37 \-H "If-Match: 80b81f314712932a4d4ea75ab0b76a4eea613012" \-H "Content-Type: application/json" \-d '{"firstname": "ronald"}'

HTTP/1.1 200 OK

# Like most of features, ETags can be disabled.

ETAG MATCH

ACCEPTED

Page 129: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

custom data layersbuild your own data layer

Page 130: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

authentication and authorizationbasic / token / hmac / BYO / OAuth2 / you name it

Page 131: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

and (a lot) moreCORS, cache control, API versioning, JOSNP, Etc.

Page 132: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

vibrant community90+ contributors / 350+ forks / 2500+ github stargazers

Page 133: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Eve-Docsautomatic documentation for Eve APIs in both HTML and JSON

CHARLES FLYNN

Page 134: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Eve-Docs

Page 135: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Eve-ElasticElasticsearch data layer for your Eve-powered API

PETR JASEK

Page 136: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Eve-SQLAlchemySQL data layer for Eve-powered APIs

PETR JASEK

Page 137: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Eve-Mongoengineenables mongoengines data models to be used as Eve schema

STANISLAV HELLER

Page 138: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Eve.NETHTTP and REST client for Eve-powered APIs

PETR JASEK

Page 139: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Eve-OAuth2leverage Flask-Sentinel to protect your API endpoints with OAuth2

THOMAS SILEO

Page 140: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

REST Layer“golang REST API framework heavily inspired by Python Eve”

THOMAS SILEO

Page 141: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Goal # 4 achievedeasy to setup, launch and scale up; also a good fit for microservices infrastracture

Page 142: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

A look back to initial draft

Clients

“Cloud”

Database

RESTful Web API

APIiOS

Android

Website

Desktop Client

? ?

Page 143: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Clients

MultipleMongoDBs

Database

Adameve instances

APIiOS

Android

Website

Desktop Client

what we have in production

Page 144: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

stories from the trenches#1. when too much (magic) is too much #2. sometimes you don’t want to debug

#3. so how do I login into this thing?

Page 145: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Take Aways

Page 146: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Enhance MongoDBwith powerful features on top of native engine

validation, document embedding (joins), referential integrity, document versioning, transformations, rate limiting, etc.

Page 147: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Consider the REST layeras an ideal data access layer

the story of pymongo 3.0 breaking changes mongo or sql or elastic or …

Page 148: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Consider the REST layeras an ideal data access layer

the story of Adam dashboards

Page 149: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Consider Microservicesleverage Eve features create a network of isolated yet standardized services

each service has a dedicated role

runs as an eve instance, with its own configuration has its own database(s)

callbacks route traffic between services

Page 150: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Clients

User-reservedMongoDBs

eve-multidb

Data

Autheve-oauth2

(flask-sentinel)

API

iOS

Android

Website

Desktop Client

Adam 1

Adameve instance

Redisauth tokens,rate limiting

Auth/UsersMongoDB

Page 151: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

Clients

service-reserved

MongoDBs

Data

Autheve-oauth2,flask-sentinel

API

iOS

Android

Website

Desktop Client

Adam 2

Adameve instance

Redisauth tokens,rate limiting

Serviceseve instances

Auth/UsersMongoDB

very simplified

Page 152: MongoDB and REST APIs A Match Made in Heaven … · MongoDB & REST APIs A Match Made in Heaven. Agenda. Agenda 1. Our use case for a RESTful API. Agenda 2. What is a RESTful API and

thanksnicolaiarocci

python-eve.orgeve