Во многих проектах стараются их избегать. Потому что уйдет человек, которых их писал и это очень тяжело поддерживать. И с версионированием этого всего как-то непонятно. И удобнее когда вся логика в одном месте — в приложении.
Мне больше нравится pydantic. У себя я превращаю аргументы функции в параметры запроса так:
from pydantic import create_model
def get_query_schema(handler):
params = inspect.signature(handler).parameters
query_params = {k: (p.annotation, p.default) for k, p in params.items() if k not in ('pk', 'request', 'self')}
return create_model('query_schema', **query_params)
это можно использовать потом в декораторе или middleware
@web.middleware
async def webapi_validate_query(request, handler):
self = handler.__closure__[0].cell_contents.__self__
if request.method not in ('GET', 'POST', 'PUT', 'DELETE'):
raise web.HTTPMethodNotAllowed(f'{request.method} not allowed')
query = request.query.copy()
if self.paginator:
self.paginator.get_page_from_query(query)
if self.filter_class:
self.filter = self.filter_class(**request.query)
validated_query = self.query_schema(**query.items()).dict()
result = await handler(request, **request.match_info, **validated_query)
return web.json_response(result, dumps=dumps)
Админкой пользуются не только люди, которые умеют с бд клиентом работать. Кроме того в таких приложениях часто присутствует какая-то логика помимо просто записей в базе и не на уровне бд.
> Как вы подходите к проектированию HTTP-API в своих Python-проектах?
Обертка над aiohttp, входные парамертры проверяются и объекты бд сериализуются с помощью mashmallow или pydantic.
Наверное скоро приведу в порядок и опубликую.
Я думал автогенерация документации и всяких swagger`ов — стандартная фича любого rest фреймворка. В любом случае есть же какой-то сериализатор/валидатор входных данных. И сериализатор выходных, надо же как-то данные из бд преобразовывать в json. В них достаточно данных для создания доков плюс докстринги.
Есть mypyc. Компилирует код с аннотациями. Вообще, производительность программиста улучшает тоже, позволяет ловить ошибки, которые иначе всплыли бы только в рантайме и их пришлось бы искать.
Я вот сделал как-то колонку под инн integer'ом. Потом начал ловить глюки, что некоторые заведомо валидные инн не проходили валидацию — посмотрел на них, оказалось есть инн начинающиеся с нуля и он «съедался».
У меня роутер Zyxel Keenetic Giga II. Он позволяет расшаривать подключенные к нему диски через SMB и DLNA, плюс ftp. Ещё на нем bittorrent клиент есть. Всё из коробки.
> 1. В Крыму холоднее, чем, например, в Азии.
Там, достаточно тепло большую часть года. Вообще снег-редкость, зато довольно противный ветер, да.
> 2. Ощущение России 90х.
Отчасти да, но для меня важнее природа, очень красиво же.
> 3. Дороже, чем в Азии.
Но дешевле, чем в РФ и Европе.
> Стоимость перелета
Я платил около 3000руб за билеты(за одного, в один конец). Довольно недорого, намного дешевле, чем было пару лет назад(были цены более 10000 руб за билет, можно было найти дешевле, но это исключение)
> ожидается
Пока что такого нет. Незнаю, что ожидается, очень в политике разбираюсь. Зато есть возможность купить недвижимость за доступные(по меркам жителя столиц) деньги.
github.com/pawnhearts/aiorf/blob/master/aiorf/modelschema.py
github.com/pawnhearts/aiorf/blob/master/aiorf/saschema.py
это можно использовать потом в декораторе или middleware
Есть aiomongo и aiohttp. Вот пример api на нем dev.to/apcelent/how-to-create-rest-api-using-aiohttp-54p1
Обертка над aiohttp, входные парамертры проверяются и объекты бд сериализуются с помощью mashmallow или pydantic.
Наверное скоро приведу в порядок и опубликую.
marshmallow, trafaret, pydantic для валидации схемы.
pipenv уж очень тормозной. poetry побыстрее, но тоже как то не очень и не так популярна. ждем когда запилят __pypackages__ с pyenv этого будет достаточно
github.com/marshmallow-code/apispec github.com/maximdanilchenko/aiohttp-apispec www.django-rest-framework.org/topics/documenting-your-api (и у каждого поля есть www.django-rest-framework.org/api-guide/fields/#help_text с описанием)
Там, достаточно тепло большую часть года. Вообще снег-редкость, зато довольно противный ветер, да.
> 2. Ощущение России 90х.
Отчасти да, но для меня важнее природа, очень красиво же.
> 3. Дороже, чем в Азии.
Но дешевле, чем в РФ и Европе.
> Стоимость перелета
Я платил около 3000руб за билеты(за одного, в один конец). Довольно недорого, намного дешевле, чем было пару лет назад(были цены более 10000 руб за билет, можно было найти дешевле, но это исключение)
> ожидается
Пока что такого нет. Незнаю, что ожидается, очень в политике разбираюсь. Зато есть возможность купить недвижимость за доступные(по меркам жителя столиц) деньги.