@guillotinaweb guillotina.readthedocs.io...
TRANSCRIPT
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