Рубрики
Без рубрики

Что я узнал из создания веб -структуры.

Несколько недель назад я работал над новым проектом YAAT (еще один инструментарий ASGI). Это ОПЕ … Tagged с Python, WebDev, Framework, Learning.

Несколько недель назад я работал над новым проектом YAAT (еще один инструментарий ASGI) Анкет Это асинхронный веб-фреймворк с открытым исходным кодом, написанный на Python.

Я работал с несколькими веб -фреймворками так долго, особенно Python Frameworks, таких как Flask и Django. Хотя я работаю с ними, я не знаю, как они работают. Путешествие началось как способ для меня изучить внутреннюю часть веб -структуры.

Вдохновение

Мое вдохновение исходит от Джахонгир Рахмонов S Пост в блоге о том, как создать веб -структуру. Кроме того, это отправная точка путешествия.

Прежде чем я продолжу дальше, позвольте мне дать вам краткое изложение о Yaat!

Представляя Yaat

YAAT – это веб -структура ASGI, предназначенная для создания веб -сервисов, используя асинхронное программирование простым способом. Он поддерживает Python 3.6+ и лицензирован под LGPL Анкет

Философия дизайна

Яат стремится быть батареи включены, для начинающих фреймворк Анкет Любой, у кого есть базовое понимание Python, должен иметь возможность понять документацию и запустить проект за короткое время.

Кроме того, YAAT поддерживает свободный стиль кодирования. Это не излишне вызывает какое -либо решение для разработчика, и то, как проект должен быть структурирован, определяется разработчиком, а не структурой.

Функции

Yaat уже имеет представления (функциональные и классовые представления), запросы, ответы, маршрутизация, веб-питания, статические файлы, шаблоны (Jinja2), Middlewares, поддержка COR Генератор Openapi и Swaggarui.

Вы можете проверить Проектная доска для прогресса.

Скажи “Привет, мир”

Привет, мир в Яате так же просто, как…

from yaat import Yaat
from yaat.responses import TextResponse

app = Yaat()

@app.route("/")
async def index(request):
     return TextResponse("Hello World")

Теперь вы знаете, что такое Yaat, достаточно говорить об этом. Основная цель этой статьи – поделиться тем, что я узнал на протяжении всего этого проекта.

Путешествие начинается

Честно говоря, это даже не началось как правильный проект с планированием детализации с точки зрения дизайна и функций. Я только что прочитал, как построить базовую структуру WSGI в блоге Jahongir Rahmonov и решил построить рамки ASGI.

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

ASGI (асинхронный интерфейс шлюза сервера) является преемником WSGI. Это спецификация дизайна для того, как веб -сервер должен общаться с асинхронными веб -приложениями.

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

Переосмысливая колесо

Некоторые говорят «Не изобретайте колесо» Анкет Но, на мой взгляд, это просто неправильно. Мы не получили резиновое колесо в первой попытке, оно началось с камня А потом это улучшилось со временем. Как это улучшилось? Потому что люди изобретать колесо Анкет

И вот где я был 28 февраля, подтолкнув первый коммит в мой новый репозиторий GitHub, который впоследствии стал Yaat. В первый день я пошел прямо в Асги Документация и начал читать, чтобы получить общую идею.

Несмотря на то, что первоначальная структура проекта была основана на Альказар (Структура Джахонгира Рахмонова, построенная в своем блоге), Яат сильно вдохновлен Starlette (Создано Том Кристи , основной участник Django Rest Framework и httpx )

Выпустить в PYPI

23 марта я выпустил самую первую версию Yaat To PYPI. Люди могут просто Установить PIP установить yaat и начните создавать минимальное асинхронное веб -приложение.

Написание документации

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

Я создал Readme Файл с надлежащей инструкцией о том, как установить структуру, каковы требования и функции. Затем я использовал github wiki, чтобы провести документацию. Однако по мере того, как проект растет, я начинаю понимать, что github wiki не подходит. Я не нахожу боковую панель очень полезной, когда у вас много контента.

Именно тогда я понял, что мне нужна правильная документация. Поэтому я начинаю искать новую услугу для размещения документации. Есть 2 требования

  1. Поддержка Markdown (я люблю это и могу легко поддержать)
  2. Документация по плоскому файлу (я хочу службу, которая может просто прочитать файлы разметки и хорошо представить его на веб-странице)

Сначала я нашел Gitbook, хотя он поддерживает Markdown, он не отвечает моим вторым требованиям. Победитель для этого Readthedocs , он отвечал как требованиям, так и с темой MKDOCS + материала, мне удалось опубликовать лучше Документация чем GitHub Wiki.

Тесты, тесты!

Никто не идеален. Вы не можете сказать, что код работает так, как вы ожидали, пока не закончите писать тест. Это применимо к YAAT. Поскольку это Python Project, очевидно, я использовал Pytest.

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

Также измерьте тестовый охват. Я использовал pytest-cov и Codecov.io Чтобы увидеть отчеты о покрытии.

Качество кода

Ваш код должен быть чистым, читаемым. Это не то, что работает нормально, но когда касается улучшения или изменений, это очень больно для разработчика.

(Оригинальный пост из Reddit )

Я использую черный (форматер кода) и Flake8 (Проверка кода) с Предварительный Коммит крюк. Так что он автоматически форматирует мой код, а Flake8 проверяет мое соответствие PEP8 (Руководство по стилю Python).

Создайте PR (запрос на вытягивание)

Даже если вы единственный участник проекта, всегда создавайте запрос на тягу. Это не хорошая практика, чтобы подтолкнуть все, чтобы освоить. С моей точки зрения, Мастер Филиал должен быть для кода, который хорошо проверяется и достаточно стабилен для производства. Поверьте мне, создание пиара сэкономит ваше время, когда вам придется отследить ошибку и сохранить ваш продукт стабильным.

Всякий раз, когда мне приходится реализовать новую функцию, я выступаю из Мастер и всегда дайте имена по Функция- Анкет Когда я создаю PR, я даю краткое описание и назначаю тег к этому. Например, улучшение для небольших изменений в существующей функции.

Автоматизация

Бег pytest По моему местному месту отлично, мне нужно убедиться, что Yaat работает, как и ожидалось, на разных версиях Python. Моя текущая машина работает с Python 3.8, поэтому, когда я запускаю тест, я знаю, что он работает на последней версии Python. Но как насчет Python 3.6 и 3.7?

Вот где Трэвис приходит в. Я использую Travis для автоматического запуска тестов, которые я написал, против 3 версий Python (3.6, 3.7 и 3.8), чтобы я мог с уверенностью сказать, что YAAT поддерживает Python 3.6+. А также генерируйте отчет о покрытии тестирования и отправьте его в Codecov.io Анкет

Благодаря Трэвису я нашел несколько ошибок, которые происходят только на Python 3.6. Например, asyncio.create_task Доступен только на Python 3.7 и выше, а для Python 3.6 вы должны сначала получить цикл событий и вместо этого создать задачу из цикла событий.

Вывод

Я многому научился из работы с этим проектом. От веб -внутренних групп, ASGI до таких инструментов, как Предварительный Коммит крючки, Codecov.io покрытие кода. Тем не менее, глава о YAAT еще не закончилась, и в ближайшем будущем есть больше функций.

Не стесняйтесь проверять репозиторий YAAT и дать мне отзывы о любых улучшениях. Спасибо, что прочитали эту статью!

Оригинал: “https://dev.to/boringdev/what-i-learned-from-building-a-web-framework-1lc7”