Как стать автором
Обновить

Sanic — быстрее, чем кролики

Время на прочтение3 мин
Количество просмотров9.4K

Как известно, в великом множестве веб-фрейморков, существующих в экосистеме Python, очень легко заблудиться. С одной стороны, большой выбор - это хорошо, но с другой - это так же и бремя, так как приходится тратить усилия на поиски лучшего или хотя бы как можно более подходящего для конкретно ваших условий и задач, а потом и на сравнение и выбор среди найденного. Кто-то выбирает Django, кто-то FastApi, Flask, Tornado, Bottle... да мало ли их? Все мы очень любим то, что на слуху и то, к чему уже привыкли. Привычка - вторая натура. Однако, среди всего этого многообразия есть поистине недооценённые вещи, и с одной из них я хочу вас познакомить.

Sanic - это асинхронный и очень быстрый фрейморк и веб-сервер для построения веб-приложений на основе микросервисной архитектуры. Его создателем является израильский программист Адам Хопкинс, в 2018 году основавший данный проект. С тех пор Sanic постоянно и неустанно развивается. В комьюнити проекта, которое в основном обитает в официальном канале в дискорде, существуют требования к кодстайлу, а также установлена ежеквартальная регулярность релизов, что не может не радовать. На момент написания статьи вышел очередной апдейт версии Sanic - 22.6.0. Также стоит упомянуть, что в начале текущего 2022 года издательством O'Reilly выпущена книга А.Хопкинса "Python Web Development with Sanic".

... хорошая девочка Лида.
Да чем же она хороша?
© Я.Смеляков

Sanic - это ASGI-сервис, со всеми вытекающими отсюда прелестями асинхронной разработки. Для развёртывания в продакшене прекрасно подходит всем известный Uvicorn.

Из коробки Sanic предоставляет возможность писать код как в синхронной, так и в асинхронной парадигме. Для эффективной разработки можно использовать любую версию Python, начиная с 3.7 (если нужна поддержка 3.6, то можно использовать версию 20.12LTS).

Для пользователей Mac и Linux доступны uvloop и ujson. Всё из той же коробки прекрасное и необходимое дополнение - собственный универсальный тестовый клиент для использования с pytest. Автодокументация Redoc и Swagger в форматe OpenAPI3, 4 варианта событий для listeners, middleware для стадий запроса и ответа, инъекции зависимостей, blueprints, расширяемость - что ещё нужно современному программисту?

Ах, да, бонус: простой и понятный синтаксис и полностью типизированные исходники. Ну не прелесть?

Ближе к делу: установка и первое минимальное приложение.

Стандартно делаем pip install sanic

# hello.py

from sanic import Sanic
from sanic.response import json

app = Sanic("my_first_app")

@app.route('/')
async def hello(request):
    return json({'hello': 'world'})

if __name__ == '__main__':
    app.run()

Знакомо, не правда ли? По-моему, когда-то где-то все мы это уже видели... Но плохо ли это? По-моему, очень удобно, синтаксис фреймворка не нужно заучивать с нуля.

К слову о том, что Sanic - это не только фрейморк, но и веб-сервер: запустить данный код из консоли очень просто: sanic hello.app (или же по старинке python3 hello.py)

Затем можно открыть браузер и перейти на http://127.0.0.1:8000/ или вызывать из консоли curl localhost:8000 -i и получить

HTTP/1.1 200 OK
Connection: keep-alive
Keep-Alive: 5
Content-Length: 17
Content-Type: application/json

{"hello":"world"}

Открыв в браузере страницу http://127.0.0.1:8000/docs мы автоматически попадаем на страницу с документацией Redoc:

http://127.0.0.1:8000/docs
http://127.0.0.1:8000/docs

Swagger же ждёт нас по адресу http://127.0.0.1:8000/docs/swagger :

http://127.0.0.1:8000/docs/swagger
http://127.0.0.1:8000/docs/swagger

И это мы ещё ничего толком не сделали. А главное, всё это можно настроить как нам хочется. Прекрасно? Прекрасно!

Но конечно же это синтетический пример, который не позволяет раскрыть всю прелесть Sanic. В следующих частях шаг за шагом мы посмотрим на его возможности.

P.S. Любителям бенчмарков предлагается перепроверить эти цифры.

Теги:
Хабы:
-1
Комментарии3

Публикации

Истории

Работа

Python разработчик
141 вакансия
Data Scientist
63 вакансии

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн