@ru_python

Страница 7040 из 9768
Tishka17
14.11.2018
16:05:52
Давай сравним скорость

LighteR
14.11.2018
16:07:02
а так вышло быстрее, чем marshmallow, serpy и drf
Скорость сериализации drf меня вгоняет в тоску

Tishka17
14.11.2018
16:07:34
Чёт я не сразу понял, что это твоё

Сорри

Google
Александр
14.11.2018
16:07:51
))

LighteR
14.11.2018
16:08:24
Как альтернативу marshmallow можно посмотреть https://github.com/lyft/toasted-marshmallow

там по-сути кодогенерация сериалайзера на основе marshmallow-схем происходит

Tishka17
14.11.2018
16:11:24
Мне маршмеллоу не нравится тем, что надо ещё какие-то схемы отдельно писать

LighteR
14.11.2018
16:12:20
Tishka17
14.11.2018
16:12:26
Жсон схема, маршмеллоу схема, потом датакласс и наконец модель алхимии. И везде блин одни и те же поля

LighteR
14.11.2018
16:12:47
генерация схем по dataclass'ам, attrs, namedtuple

Tishka17
14.11.2018
16:14:25
json-схему уже точно можно генерить по marshmallow-схеме
Нельзя. Это ж документация к апи фактически.

Она должна быть независима от реализации

То есть технически можно, но имхо не стоит, иначе хрен изменения найдешь

Ее же не только твой сервер будет юзать

Evgeniy ?
14.11.2018
16:15:36
ребята, кто подскажет самый разумный путь, для колективной работы над кодом

Google
LighteR
14.11.2018
16:17:07
Нельзя. Это ж документация к апи фактически.
Ну поэтому как раз и можно. Чтобы документация была в консистентном состоянии с api

Tishka17
14.11.2018
16:18:22
Ну поэтому как раз и можно. Чтобы документация была в консистентном состоянии с api
Если бы этим никто не пользовался, она будет. Но эту схему же ещё клиенты юзают

Как она к ним попадет? Путем сборки сервера из сорцов?

LighteR
14.11.2018
16:19:22
Сервер же налету это может генерить

Tishka17
14.11.2018
16:21:23
Именно. А клиентский код на лету не сгенеришь

Он блин написан и проверен на соответствие апи, которое выдали

LighteR
14.11.2018
16:22:17
Так а ручное написание json-схем какую проблему решает

Tishka17
14.11.2018
16:22:34
Проблему версионирования апи

LighteR
14.11.2018
16:22:38
если у тебя поменялось апи, но не поменялась json-схема для него, то что это решит?

Tishka17
14.11.2018
16:22:46
И согласования кода сервера и клиента

Александр
14.11.2018
16:23:47
там по-сути кодогенерация сериалайзера на основе marshmallow-схем происходит
А у меня кодогенерация на основе схемы датакласса происходит, та же идея

Tishka17
14.11.2018
16:23:55
если у тебя поменялось апи, но не поменялась json-схема для него, то что это решит?
Ты увидишь, что сервер не принимает валидные данные и будешь фиксить сервер. Иди поменяешь схему и пойдешь всем рассказывать об этом

Dima
14.11.2018
16:26:47


LighteR
14.11.2018
16:26:50
Ты увидишь, что сервер не принимает валидные данные и будешь фиксить сервер. Иди поменяешь схему и пойдешь всем рассказывать об этом
Я смогу увидеть breaking change в API по изменению его схемы даже без того чтобы отправлять реальный запрос

И это должно происходить еще на этапе CI

Tishka17
14.11.2018
16:27:30
Я смогу увидеть breaking change в API по изменению его схемы даже без того чтобы отправлять реальный запрос
Разработчики клиентов как твои изменения узнают? Сами догадаются?

Google
Tishka17
14.11.2018
16:27:44
Табы на пробелы замени

?? Eugene
14.11.2018
16:29:05
Почитать про pep8

LighteR
14.11.2018
16:29:41
Разработчики клиентов как твои изменения узнают? Сами догадаются?
Если это не breaking change им ничего знать не обязательно

Tishka17
14.11.2018
16:29:45
Нажми ctrl-alt-shift L или как там

LighteR
14.11.2018
16:29:55
а breaking changes быть не должно

Tishka17
14.11.2018
16:30:29
Любое изменение схемы может быть breaking. Или у тебя 100% покрытие?

Короче, я за генерацию кода из жсон схемы. А не наоборот

LighteR
14.11.2018
16:31:34
Любое изменение схемы может быть breaking. Или у тебя 100% покрытие?
Нет, не любое. Например, добавление поля в response не должно являться breaking change

Tishka17
14.11.2018
16:31:45
Или сваггер

Нет, не любое. Например, добавление поля в response не должно являться breaking change
Может стать. Если клиент ожидает строго определенный набор полей

Реализации разные

Некоторые плохие

LighteR
14.11.2018
16:32:34
Если кто-то не использует tolerant reader, то он ССЗБ

но если делается публичное апи, то с этим конечно сложнее

Tishka17
14.11.2018
16:33:06
Это понятно.

Эмм. Везде где больше 2 человек и есть деление на команды апи становится своего рода публичным по отношению к тебе

LighteR
14.11.2018
16:34:53
В компании могут быть конвеншены, что любой потребитель апи должен являться tolerant reader. Если клиент упадет из-за появления необязательного поля в api, то виноват будет именно разработчик клиента

И это работает и в случае с 2+ разработчиками и в случае с 20+

Если не придерживаться таких правил, то получится, что либо ты вообще не сможешь менять свои апи, либо будешь поддерживать 10ки версий одного и того же api

Если интересно могу рассказать как мы реализовывали матчинг совместимости клиентов и серверов на стадии CI

Google
Tishka17
14.11.2018
16:40:54
У нас как правило согласованное обновление было. Либо сохраняли старые методы без изменений для старых клиентов

LighteR
14.11.2018
16:42:17
Tishka17
14.11.2018
16:43:23
В больших проектах не всегда возможно найти всех потребителей апи
Тем важнее версионировать апи. Даже минорные версии, которые не ломают совместимость, вроде

LighteR
14.11.2018
16:48:56
Каждый микросервис предоставляет (геренирит налету) свою серверную сваггер-схему. Каждый клиент который использует какой-то метод api, описывает в своей анотации какую схему request/response он ожидает от сервера (это может делаться кодогенерацией, либо руками), эта анотация используется при вызове клиентом апи для сериализации/десериализации запроса/ответа. Таким образом каждый микросервис налету может сгенерировать для каждого используемого им api сваггер-схему того как выглядит этот api с точки зрения этого клиента. Дальше можно сматчить эти две схемы и получить diff, по-которому можно понять есть ли там breaking change. Помимо этого, можно понять есть ли вообще клиенты у api, которые используют какое-то поле, чтобы можно было его выпилить

serbernar
14.11.2018
16:49:46
в чате есть доктор? тут человеку плохо

LighteR
14.11.2018
16:52:06
Из-за того что у каждого клиента используется схема, то это гарантирует что клиент использует/отправляет только те поля, которые описаны в схеме

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

serbernar
14.11.2018
16:57:30
в компании ооо "сказка"

LighteR
14.11.2018
17:01:15
в компании ооо "сказка"
Не знаю что там в сказке, но это вполне себе true-story

Можешь посмотреть, как это, например, делают в циане: https://www.youtube.com/watch?v=ANDGRmKKEG0

Nikolay
14.11.2018
17:04:41
в компании ооо "сказка"
Нет, в любой нормальной

Корректный подход

Дмитрий
14.11.2018
17:09:09
никто не подскажет как получить из базы (mysql) username пользователя? к примеру после команды /start записывается username пользователя и как получить этот юзернейм?

Дмитрий
14.11.2018
17:20:32
причем тут библиотека sqlite, когда я писал про mysql и библиотека там pymysql

Mename
14.11.2018
17:20:53
pyTelegramBotAPI

Google
Mename
14.11.2018
17:20:57
Тут юзернейм

Дмитрий
14.11.2018
17:22:06
ну при команде /start записывается его юзернейм в таблицу и так каждый раз. А я хочу получать с этой таблицы юзернейм этот что бы одного и того 100 раз не записывало

Дмитрий
14.11.2018
17:34:41
+ я получаю список всех юзернеймов, как только теперь сделать проверку на то, есть ли среди них юзернейм

Mename
14.11.2018
17:35:30
Ты не Дима, ты Алёша

Тебе всё уже сказали

Полностью за тебя делать не будут

Дмитрий
14.11.2018
17:37:19
боже, что ты мне сказал? два раза сказал что мне уже ответили? и один раз что нужно идти гуглить?



Павел
14.11.2018
17:39:10
ребят кому не сложно и разбираеться в питоне напишите плиз в личку а то я с этим ботом уже мозг сломал

Страница 7040 из 9768