Python-Eve
APIs RESTful Profissionais em poucas linhas
Sobre @rudaporto
● Interesses
○ Desenvolvimento Web / DevOps
○ Microserviços / Arquiteturas Distribuídas
○ Metodologias Ágeis / Lean Startup
● Experiências
○ 18 anos em Tecnologia, 16 de Linux e 13 de Python
○ Palestrante em eventos OSS
○ Formação em Ciência da Computação
● Ocupações
○ Projetos Especias na Pearson Brasil
○ Membro Fundador da Associação Python Brasil
○ Entusiasta Python e OSS
Agenda
● O Problema
● Uma Solução
● Python-Eve: Features
● Caso de Estudo
● Conclusão
● Perguntas
O Problema
● O que eu quero?
○ Arquitetura Distribuída
○ Programar para uma Interface
○ Desacoplar Serviços
● Por que eu quero?
○ Ambiente Heterogêneo
○ Integrar Aplicações (Plataformas)
○ Facilitar o Desenvolvimento
● Como eu quero?
○ (Micro) Serviços RESTful
○ Facilidade de Rapidez - DRY
○ Requisitos Não Funcionais
Uma Solução : Python-Eve
● Python REST API Framework (for Humans)
● Flask + Cerberus + Events + Redis + MongoDB + SQL
● Extensions
○ ElasticSearch
○ MongEngine / SQLAlchemy
○ .Net
○ OAuth2 example
○ Swagger / Doc
● Author: http://nicolaiarocci.com/
● Github: https://github.com/nicolaiarocci/eve
Python-Eve: Features
● Emphasis on REST
● Full range of CRUD operations
● Customizable resource endpoints
● Customizable, multiple item endpoints
● Filtering and Sorting
● Pagination
● HATEOAS (Aka Hypermedia)
● JSON and XML Rendering
● Conditional Requests
Python-Eve: Features
● Data Integrity and Concurrency Control
● Bulk Inserts
● Data Validation
● Extensible Data Validation
● Resource-level Cache Control
● API Versioning
● Document Versioning
● Authentication
● CORS Cross-Origin Resource Sharing
Python-Eve: Features
● JSONP
● Read-only by default
● Default Values
● Predefined Database Filters
● Projections
● Embedded Resource Serialization
● Event Hooks
● Rate Limiting
● Custom ID Fields
Python-Eve: Features
● File Storage
● GeoJSON
● Internal Resources
● Enhanced Logging
● Operations Log
● MongoDB and SQL Support
● Powered by Flask
Detalhes: http://python-eve.org/features.html
Caso de Estudo: Trac
● Aplicação Legada
● REST API para Frontend
● Criação do virtualenb
○ mkdir trac_example
○ virtualenv --no-site-packages trac_example
○ cd trac_example
○ source bin/activate
○ pip install -r requirements.txt
● models.py gerado via sqlacodegen
○ sqlacodegen --outfile models.py postgres://trac:
meetup@python@localhost/trac
Conclusão
● Pontos Fortes
○ Muitas funcionalidades
○ Flexibilidade
■ Hooks, Events, Schema adjusts
○ Rapidez para MVP
● Contrapartidas
○ Feito para usar com MongoDB
○ Plugins ainda em desenvolvimento
○ Nem todo schemas SQL são suportados
○ Pode necessitar de ajustes no BD
○ Depender de um Framework que faz muitas “mágicas”
Links
● Apresentaçãoes REST + EVE
○ https://speakerdeck.com/nicola/restful-web-api-and-mongodb-go-for-a-
pic-nic
○ https://speakerdeck.com/nicola/eve-rest-api-for-humans
○ https://speakerdeck.com/nicola/mongodb-and-rest-apis-a-match-made-in-
heaven
● Outros utilitários:
○ https://pypi.python.org/pypi/sadisplay
○ https://pypi.python.org/pypi/sqlacodegen
Perguntas?
Rudá Porto
Filgueiras
Twitter: @rudaporto
Github: @rudaporto
Email: rudazz@gmail.com
Obrigado!

Python Eve - APIs RESTful Profissionais em poucas linhas

  • 1.
  • 2.
    Sobre @rudaporto ● Interesses ○Desenvolvimento Web / DevOps ○ Microserviços / Arquiteturas Distribuídas ○ Metodologias Ágeis / Lean Startup ● Experiências ○ 18 anos em Tecnologia, 16 de Linux e 13 de Python ○ Palestrante em eventos OSS ○ Formação em Ciência da Computação ● Ocupações ○ Projetos Especias na Pearson Brasil ○ Membro Fundador da Associação Python Brasil ○ Entusiasta Python e OSS
  • 3.
    Agenda ● O Problema ●Uma Solução ● Python-Eve: Features ● Caso de Estudo ● Conclusão ● Perguntas
  • 4.
    O Problema ● Oque eu quero? ○ Arquitetura Distribuída ○ Programar para uma Interface ○ Desacoplar Serviços ● Por que eu quero? ○ Ambiente Heterogêneo ○ Integrar Aplicações (Plataformas) ○ Facilitar o Desenvolvimento ● Como eu quero? ○ (Micro) Serviços RESTful ○ Facilidade de Rapidez - DRY ○ Requisitos Não Funcionais
  • 5.
    Uma Solução :Python-Eve ● Python REST API Framework (for Humans) ● Flask + Cerberus + Events + Redis + MongoDB + SQL ● Extensions ○ ElasticSearch ○ MongEngine / SQLAlchemy ○ .Net ○ OAuth2 example ○ Swagger / Doc ● Author: http://nicolaiarocci.com/ ● Github: https://github.com/nicolaiarocci/eve
  • 6.
    Python-Eve: Features ● Emphasison REST ● Full range of CRUD operations ● Customizable resource endpoints ● Customizable, multiple item endpoints ● Filtering and Sorting ● Pagination ● HATEOAS (Aka Hypermedia) ● JSON and XML Rendering ● Conditional Requests
  • 7.
    Python-Eve: Features ● DataIntegrity and Concurrency Control ● Bulk Inserts ● Data Validation ● Extensible Data Validation ● Resource-level Cache Control ● API Versioning ● Document Versioning ● Authentication ● CORS Cross-Origin Resource Sharing
  • 8.
    Python-Eve: Features ● JSONP ●Read-only by default ● Default Values ● Predefined Database Filters ● Projections ● Embedded Resource Serialization ● Event Hooks ● Rate Limiting ● Custom ID Fields
  • 9.
    Python-Eve: Features ● FileStorage ● GeoJSON ● Internal Resources ● Enhanced Logging ● Operations Log ● MongoDB and SQL Support ● Powered by Flask Detalhes: http://python-eve.org/features.html
  • 10.
    Caso de Estudo:Trac ● Aplicação Legada ● REST API para Frontend ● Criação do virtualenb ○ mkdir trac_example ○ virtualenv --no-site-packages trac_example ○ cd trac_example ○ source bin/activate ○ pip install -r requirements.txt ● models.py gerado via sqlacodegen ○ sqlacodegen --outfile models.py postgres://trac: meetup@python@localhost/trac
  • 11.
    Conclusão ● Pontos Fortes ○Muitas funcionalidades ○ Flexibilidade ■ Hooks, Events, Schema adjusts ○ Rapidez para MVP ● Contrapartidas ○ Feito para usar com MongoDB ○ Plugins ainda em desenvolvimento ○ Nem todo schemas SQL são suportados ○ Pode necessitar de ajustes no BD ○ Depender de um Framework que faz muitas “mágicas”
  • 12.
    Links ● Apresentaçãoes REST+ EVE ○ https://speakerdeck.com/nicola/restful-web-api-and-mongodb-go-for-a- pic-nic ○ https://speakerdeck.com/nicola/eve-rest-api-for-humans ○ https://speakerdeck.com/nicola/mongodb-and-rest-apis-a-match-made-in- heaven ● Outros utilitários: ○ https://pypi.python.org/pypi/sadisplay ○ https://pypi.python.org/pypi/sqlacodegen
  • 13.
  • 14.
    Rudá Porto Filgueiras Twitter: @rudaporto Github:@rudaporto Email: rudazz@gmail.com Obrigado!