@guillotinaweb guillotina.readthedocs.io...

Preview:

Citation preview

guillotina.ioguillotina.readthedocs.io

@guillotinaweb

WEB FRAMEWORKS

• Angular/React : Server rendering frameworks are dying

• Most sources of data comes from the web/api

• Lots of experience on storing, distributing, managing resources

EVOLUTIONThe spirit of great

frameworks live in an AsyncIO context

INSPIRATIONPlone/Zope’s hierarchical data model

Pyramid’s decorator-based configuration

Django’s global application settings

ZCA pluggability

Plone/Zope’s security model

JSON Schema

LESSONSTaking lessons learned from

Pyramid, Plone, Django:simplify and apply to an

AsyncIO context

FEATURES

TRANSACTIONAll operations are managed

to be durable and confirmed,conflict resolution policies

CONSCIENTIOUS WRITER

Reduce conflict errors, better performance

RELATIONAL DATABASES

Use the best database systems available

PostgreSQLCockroachDB

TREEInformation isorganized in

tree of objects

RESOURCESObjects are resources with

schema attributes, annotations, OO inheritance and static/dynamic behaviors.

RESOURCE

JSON SCHEMA/PYTHON

Serialization of python interfaces to JSON Schema

and back again

SECURITYFull definition of permissions / roles / principals with global

and local inheritance of permissions on the tree.

Allow, Deny, Unset, AllowSingle (no inheritance)

CRUDDynamic Traversal CRUD HTTP verbs mapping for

each content type

Custom endpoints for specific operations

GET

HEAD

POST

PUTPATCH

ASYNCIOAll based on asyncio for

network integrations with external indexers, db,

caching, services

Based on aioHTTP

SIMPLEEasy to install,

Easy to develop

pip install guillotinadocker run guillotina/guillotina

CORSCors configured globally and

enabled by default

WEBSOCKETWebsocket connection to apply operations through

frames. Mapping of REST API on a TCP async channel.

MICRO-SERVICESPerfect for micro-services

TUSBinary resumable file upload

APPLICATIONS

Easily extendable with python packages

guillotina_swaggerguillotina_elasticsearchguillotina_rediscacheguillotina_s3storage

guillotina_gcloudstorageguillotina_dbusersguillotina_mailer

guillotina_pgcatalog

EXTENSIBLEBuilt with adapter and utility

registration and lookup patterns for easy

extensibility.

COOKIE CUTTER

Cookie cutter templates for configuration and

applications

ASYNCIO TOOLS: QUEUES & POOLSManaged queues and pool and after response tasks

EVENTAsync event based system to

trigger operations in code

Async tasks

REGISTRYConfiguration registry for

each container

STATIC FILES AND JS APPS

Support for serving JavaScript applications

MULTI DBMount multiple DBs

Supports:POSTGRESQLCOCKROACH

With dynamic database support

FILE CLOUDSupport for S3/GCloud

storage.

Database blob storage otherwise

INDEXElasticSearch indexing

DIST CACHERedis backend

SWAGGERAutomatic API

documentation generation

CONTAINERSDocker / K8s / Nomad out

the box

EXPLICIT PYAll configuration is defined

on the code using decorators

@configure.service()

URL Structure

/DB/CONTAINER/OBJ1/OBJ2

DATA MODEL

Resource & Container

InterfaceSchema fields

Static Behaviors

Dynamic Behaviors

Demo

Recommended