26
Flask, REST, validation Yehor Nazarkin twitter.com/nimnull github.com/nimnull

Flask, rest and data

Embed Size (px)

Citation preview

Flask, REST, validation

Yehor Nazarkin twitter.com/nimnull github.com/nimnull

Требования

• Что в основе?

• Что хотим получить?

• Как будем расширять?

• Где храним данные?

REST

• хорошо подходит для web сервисов

• ресурсо-ориентированный

• отсутствие состояния (в декларации)

Потребности

• представление:

players/ — GET (read many), POST (create one)

players/1 — GET (read one), PUT (update one), DELETE (delete one)

Потребности

• фильтрация/сортировки данных:

players/?filter=joined_at__gte%3D1429821631

players/?order_fields=nickname,joined_at&order_dir=asc

Потребности• валидация клиентского ввода

• поддержка нескольких хранилищ

• сущности по агрегированным данным

• аутентификация (cookies, basic http, token-based)

• авторизация (группы, пользователи)

• доступ групп клиентов к разным наборам атрибутов

Варианты решения

• Пишем своё

• Берем готовое решение и допиливаем

Django?

• django-tastypie

• django-rest-framework

• django-pyston

• etc

Django?• Известные проблемы расширяемости

• Not Invented Here

• Эволюция проекта часто влечет отказ от поставляемых решений

Flask?• микро-фреймворк

• основан на werkzeug & jinja2

• большое количество расширений

• На почитать — http://flask.pocoo.org

Flask?

• гибкость

• простота (относительная)

• расширяемость

Что уже есть?• eve

• flask-restful

• flask-restless

• potion

Если пилим сами

• MethodView FTW!

• flask.ext….anything

Если пилим сами

Как проверять?• Imperative

• Declarative

• Mixed?

Где проверять• Данные от пользователей

• Отправка/обработка результатов внешних сервисов

• Схема данных хранилища

Note:

ORM и подобные предлагают собственные решения

Как проверять?

Как проверять?

формы (Django/WTF/etc)

Как проверять?• Gladiator (py3)

• Cerberus (py3)

• Schemer

• kanone

• trafaret

Как проверять?

Как проверять?

Как проверять?

Другие проблемы?

Вопросы?

Links:• Nested resources — https://github.com/alanjds/drf-nested-routers

• Gladiator — https://github.com/alanjds/drf-nested-routers

• Schemer — https://github.com/gamechanger/schemer

• Trafaret — https://github.com/deepwalker/trafaret