LINUX.ORG.RU

Выбор перспективного фреймворка для REST Api

 , ,


2

3

Всем привет. Пытаюсь выбрать «идеальный» бэкенд-фреймворк для REST Api либо на Питоне, либо на Go. Конкретные кейсы не озвучу, потому что скажешь «блог» - посоветуют Вордпресс. Выбор между этими языками странный, согласен, но все же. Выбираю между aiohttp (Python), fastapi (Python) и gin/gonic (Golang). Синхронщину типа Flask (Python) я отмёл, потому что, мне кажется, в плане производительности их в 2019 уже не особо перспективно использовать. Тем более, что особой разницы в плане «удобства» разработки, что на Flask, что на aiohttp нет (оба микрофреймворки), а второй явно шустрее. В Django много лишнего, а drf для него медленный очень - тоже отмел. Помогите определиться с выбором, на чем из перечисленного на текущий момент пилить REST Api более перспективно и удобно сайты среднего размера различной тематики у которых фронтенд в виде SPA? Ну, скажем, современный интернет-магазин. Есть ли вообще смысл юзать питоновскую асинхронщину нынче, когда есть го?

В приоритете - гармония между производительностью полученного проекта, моей производительностью в плане скорости разработки и потреблении ресурсов сервера.

★★

Последнее исправление: dimuska139 (всего исправлений: 2)
Ответ на: комментарий от genryRar

ну вообщемто все так, однако если в питоне начинает нехватать скорости - за редким исключением это не проблема. есть uvloop, pypy, cython, numbla и еще какаято новая приблуда.

Это не имеет никакого отношения к питону, да и никаких проблем не решает. Логика на пистоне работать быстрее не будет, а подобной фигнёй только школоту в бенчмарках хелвордов дурить.

NishiragiShintaro
()
Ответ на: комментарий от genryRar

не только не имеет отношения к ресту, но и возникает проблемка - если нужны не-HTTP протоколы (например переход на websocket или rsocket), а у вас сейчас рест - это адище, ибо рест полностью завязан на http (в отличии от всех остальных протоколов доступа к апи).

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

ritsufag ★★★★★
()

Зачем тебе устаревший REST, когда на вебсокетах все элементарно делается? Заодно бонусом асинхронность получишь!

// и уж пхытон в вебе использовать - верх маразма!

anonymous
()
Ответ на: комментарий от ritsufag

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

разве что рест-апи прикручено в виде адаптера-интерфейса, а внутренний интерфейс построен апостолами solid.

genryRar ★★
()
Ответ на: комментарий от genryRar

разве что рест-апи прикручено в виде адаптера-интерфейса

this.
REST контроллеры очень тонкие и не имеют какой-либо бизнес логики.

ritsufag ★★★★★
()

Может elixir/phoenix? А как по мне flask лучше.

Deleted
()
Ответ на: комментарий от NishiragiShintaro

Логика на пистоне работать быстрее не будет, а подобной фигнёй только школоту в бенчмарках хелвордов дурить.

да ты шо? а пацаны то и не знали...

обосновать смогеш или просто лужу газируеш? :)

genryRar ★★
()
Ответ на: комментарий от genryRar

да ты шо? а пацаны то и не знали...

Зачем мне спорить с идиотом? Давай попроще. Ты утверждаешь, что логики на говнопистоне пистоне писать можно и она будет не говном. Хорошо. А теперь ты побежишь объяснять причины написания логики и самого пистона не на пистоне. Если пистон способен, то зачем всё логику выносить из пистона? В твоей методичке причины написаны?

NishiragiShintaro
()
Ответ на: комментарий от genryRar

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

NishiragiShintaro
()

Выбор перспективного фреймворка для REST Api

Python

Golang

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

silver-bullet-bfg ★★
()
Последнее исправление: silver-bullet-bfg (всего исправлений: 1)

Плюсую за Falcon.

Не могу переехать на него в некоторых проектах из-за жесткой зависимости от mongoengine.

Octagon
()
Ответ на: комментарий от dimuska139

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

По сути - golang есть нишевый продукт, который не удобен при web-разработке и больше заточен под сетевые службы. Говорю, как человек писавший на нём в команде крупный проект. У Go много недостатков и ограничений, которые призваны сделать возможным написания работающей асинхронщины любым джуном. И это его главная сильная и слабая сторона.

Python - это современная замена PHP. Его главный плюс, опять же, простота. Но он медленный, в нем есть недостатки (они есть у всего, скажем честно). И он больше подходит как средство разработки прототипов, которые потом будут перенесены на нормальный стек. Если вы пишите не hi-load - то его достаточно. Но что-то по настоящему серьезное на нём - будет много проблем, которые проще решить сменой стека. Опять же - есть большой опыт на эту тему. Будет интересно - стучитесь в личку, могу рассказать. Хотя как язык бизнес-логики или скриптинга он хорош. Но, говорить, что это перспективный язык - я бы не стал. У него есть свой круг задач, где пока он чуть лучше за счет батареек и низкого порога вхождения. Но прогресс на месте не стоит и, возможно, вскоре он будет вытеснен языком <language_name>, как тот же Perl в своё время был замещен во многих сферах как раз Python'ом.

Не допускайте главной ошибки большей части разработчиков - не делайте из языка религию. Инструмент нужен, чтобы решать конкретные задачи, а не пытаться запихнуть везде и всюду. Для интереса - напишите на Flask socket-сервер, а потом перенесите код на тот же NodeJS и увидите, что для этой задачи Python и перспективы - вещи не совместимые.

Конечно, сейчас набегут фанатики и будут приводить вам Sanic и прочие интересные штуки, которые внутри - вещи, реализованные на других языках, для которых Python лишь обёртка. Тогда возникает вопрос - а нужно ли вам это? Если да - то просто юзайте, решайте задачи.

Да и понятие «перспективы» в ИТ очень сомнительный показатель... NodeJS и Python при появлении не воспринимали серьезно и считали мёртвыми технологиями, а практика сказала обратное. А в то же время, когда-то очень перспективный Rebol3 просто умер и стал мало кому нужен.Ну или возьмите D Александреску, который должен был быть «убийцей» С++. Где сейчас D и где C++?

silver-bullet-bfg ★★
()
Ответ на: комментарий от silver-bullet-bfg

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

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

P.s. всякие Sanic я решил не юзать, потому что чего-то много подобных фреймворков в питоне расплодилось, а устаревают и заменяются они новыми очень быстро. Напоминает ситуацию с JS.

dimuska139 ★★
() автор топика
Ответ на: комментарий от dimuska139

А по поводу сложности написания крупных сервисов на го: это проблема не языка, а особенностей разработки. Написание чего-либо крупного при использовании микрофреймворка на любом другом языке в плане трудозатрат и сложности поддержки качества кода вполне сопоставимо. Писал сервисы на slim (php), go (gin/gonic), на питоне не писал для прода, но тыкал, так сказать, в целях изучения.

dimuska139 ★★
() автор топика
Ответ на: комментарий от silver-bullet-bfg

прототипов, которые потом будут перенесены на нормальный стек

Так что вам мешает перечислить стеки, пригодыне для хайлоада? У многих людей ассоциация с Java/C#/Erlang. C/C++ обычно в виде библиотек, а не веб сервисов.

Не допускайте главной ошибки большей части разработчиков - не делайте из языка религию.

Лично я такое тоже не люблю, но этих людей можно понять. Человек набирал навыки и опыт работы на стеке Х. И если есть выбор: пилить новый продукт на стеке Х или стеке Y, то это часто выливается в «или писать на стеке Х, где я синьор и могу задавить авторитетом, или писать на стеке Y, где я джун и мне будут часто указывать на мои ошибки, понижая самооценку». Не говоря уже про деньги. После этого фанатизм к языку становится понятен.

А чтобы иметь навыки и опыт на многих стеках, нужно или в студенчестве мотаться с языка на язык (как я), слушая «ты несерьёзный, взял бы ОДИН язык и развивался бы в нём», либо искренне любить программирование. Понятное дело, что если бы все программисты любили этим заниматься, сфера разработки была гораздо лучше. И недружелюбнее к новичкам (порог вхождения, а не унижения).

низкоквалифицированные программисты могли писать асинхронный код

При сильном желании такое можно и на С++. Нужно взять Qt, техлида, который отлично шарит в C++ и Qt, задаёт джунам строгий code style с code review на каждую правку. Да и вообще Qt сильно снижает порог вхождения (например, можно передать вектор по значению, а не по ссылке или указателю, и не получить лишнего копирования всего контейнера благодаря implicit sharing). Всё из-за того, что сигналы-слоты работают без оверхеда между объектами в одном треде и НЕЯВНО делают нужные блокировки при передаче данных в объект в другом треде (

QObject::moveToThread
, QueuedConnection...). И таким образом можно получить джунов, которые «магически» пишут работающий асинхронный и многопоточный код на Qt и делают большие глаза, услышав «мьютекс», «семафор». И не стоит забывать, что Qt style отличается от boost style примерно также, как и С++ отличается от Java.

Вот только надо отдельно тянуть как минимум Qt Core, а если нужен один бинарник - регулярно платить Digia.

arturianec100
()
Ответ на: комментарий от dimuska139

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

Подключите к эластику, который меняет раз в пару часов сигнатуру... Увидите, что получится.

Несмотря на это, никто в здравом уме писать на пхп что-то отличное от сайта/веб-сервиса не станет.

А люди пишут, как ни странно.

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

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

Каких-либо явных преимуществ перед пхп при разработке сайтов у него нет. Разве что сам язык приятнее, сообщество более опытное, на мой взгляд (более активно пишут тесты, например), ну и строгая динамическая типизация более приятна лично мне, чем нестрогая.

Только недостатки, по сравнению с PHP7.

P.s. всякие Sanic я решил не юзать, потому что чего-то много подобных фреймворков в питоне расплодилось, а устаревают и заменяются они новыми очень быстро. Напоминает ситуацию с JS.

Вы не писали на NodeJS значит. Express стабилен и он уже очень давно живет. Вы путаете хипсторские поделки и поделки нормальные фреймворки.

silver-bullet-bfg ★★
()
Ответ на: комментарий от arturianec100

Так что вам мешает перечислить стеки, пригодыне для хайлоада? У многих людей ассоциация с Java/C#/Erlang. C/C++ обычно в виде библиотек, а не веб сервисов.

Ну да. Из хипсторского - еще Elixir, NodeJS, Rust.

А чтобы иметь навыки и опыт на многих стеках, нужно или в студенчестве мотаться с языка на язык (как я), слушая «ты несерьёзный, взял бы ОДИН язык и развивался бы в нём»

Ну - фанатики и евангелисты всегда так говорят. А потом получаем калькуляторы по 2гб в оперативке, да.

либо искренне любить программирование.

Если человек не любит - пусть валит с профессии.

Понятное дело, что если бы все программисты любили этим заниматься, сфера разработки была гораздо лучше.

Так может и ссаными тапками тех, кто не любит?

И недружелюбнее к новичкам (порог вхождения, а не унижения).

Так может гнать ссаными тапками чуваков с ЧСВ? Чаще всего у них как раз знаний меньше всего. В среднем по больнице.

При сильном желании такое можно и на С++. Нужно взять Qt, техлида, который отлично шарит в C++ и Qt, задаёт джунам строгий code style с code review на каждую правку.

А разве не так и должны строить профессионалы свою работу? Я не про хипстеров, стартаперов и прочих особо одарённых личностей.

Да и вообще Qt сильно снижает порог вхождения (например, можно передать вектор по значению, а не по ссылке или указателю, и не получить лишнего копирования всего контейнера благодаря implicit sharing).

Ну как сказать... C++/Qt в любом случае сложнее Golang или Python. Даже из-за базовой концепции сигналов и слотов, упомянутых ниже.

И таким образом можно получить джунов, которые «магически» пишут работающий асинхронный и многопоточный код на Qt и делают большие глаза, услышав «мьютекс», «семафор».

Но способов стрелять в ногу - в С++ больше еще.

И не стоит забывать, что Qt style отличается от boost style примерно также, как и С++ отличается от Java.

Ну это логично, да

Вот только надо отдельно тянуть как минимум Qt Core, а если нужен один бинарник - регулярно платить Digia.

Ну это как бы тоже нормально за инструмент, который решает твои проблемы - заплатить...

silver-bullet-bfg ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.