python eve - apis restful profissionais em poucas linhas
TRANSCRIPT
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?