HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#Мнения</a></p>
1 <p><a>#Мнения</a></p>
2 <ul><li>27 сен 2022</li>
2 <ul><li>27 сен 2022</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><h2>Как выбрать фреймворк для бэкенда: мнения разработчиков</h2>
4 </ul><h2>Как выбрать фреймворк для бэкенда: мнения разработчиков</h2>
5 <p>Опытные разработчики рассказывают о том, какие фреймворки для бэкенда существуют и для каких задач они подходят.</p>
5 <p>Опытные разработчики рассказывают о том, какие фреймворки для бэкенда существуют и для каких задач они подходят.</p>
6 <p>Иллюстрация: Merry Mary для Skillbox Media</p>
6 <p>Иллюстрация: Merry Mary для Skillbox Media</p>
7 <p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
7 <p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
8 <p>У каждого разработчика - свои любимые фреймворки для построения бэкенда. Разбираемся вместе с опытными программистами, какой из фреймворков лучше впишется в проект.</p>
8 <p>У каждого разработчика - свои любимые фреймворки для построения бэкенда. Разбираемся вместе с опытными программистами, какой из фреймворков лучше впишется в проект.</p>
9 <p>В вебе фреймворки используются для построения и клиентской, и серверной части приложений. Сегодня расскажем, как выбрать фреймворк для серверной части, а в следующий раз поговорим о фронтенде.</p>
9 <p>В вебе фреймворки используются для построения и клиентской, и серверной части приложений. Сегодня расскажем, как выбрать фреймворк для серверной части, а в следующий раз поговорим о фронтенде.</p>
10 <p>В первую очередь выбор веб-фреймворка на сервере зависит от языка программирования. Если у вас в команде питонисты, вряд ли вы будете переводить их на Java - соответственно, вы будете танцевать от людей. А если проект новый и вы определяетесь и с задачами, и с языком, то тут надо отталкиваться от денег, философии, скорости работы, комьюнити и от того, что вам нравится. В общем, вечный вопрос для холиваров :)</p>
10 <p>В первую очередь выбор веб-фреймворка на сервере зависит от языка программирования. Если у вас в команде питонисты, вряд ли вы будете переводить их на Java - соответственно, вы будете танцевать от людей. А если проект новый и вы определяетесь и с задачами, и с языком, то тут надо отталкиваться от денег, философии, скорости работы, комьюнити и от того, что вам нравится. В общем, вечный вопрос для холиваров :)</p>
11 <p>Ещё надо смотреть на поставленные задачи. Если вам нужен "тупенький" веб-прокси, который мало что делает - просто отдаёт два-три JSON, - подойдёт любой легковесный фреймворк. Например, тот же Flask.</p>
11 <p>Ещё надо смотреть на поставленные задачи. Если вам нужен "тупенький" веб-прокси, который мало что делает - просто отдаёт два-три JSON, - подойдёт любой легковесный фреймворк. Например, тот же Flask.</p>
12 <p>Есть асинхронные фреймворки - AIOHTTP/FastAPI/Tornado. Асинхронщина нужна, когда у вас большой пул подключаемых клиентов и, соответственно, много запросов от них - они помогают не убить сервер и не тратиться на ресурсы, чтобы выстроить эту махину в синхронных движках.</p>
12 <p>Есть асинхронные фреймворки - AIOHTTP/FastAPI/Tornado. Асинхронщина нужна, когда у вас большой пул подключаемых клиентов и, соответственно, много запросов от них - они помогают не убить сервер и не тратиться на ресурсы, чтобы выстроить эту махину в синхронных движках.</p>
13 <p>Каждый из популярных веб-фреймворков всегда рассматривают по канону "готовых плюшек". Например, в Python это Django и AIOHTTP, а в Java - Spring / Spring Boot. Их чаще всего берут за канон, потому что они содержат кучу дополнительных инструментов: авторизацию, cookies, заголовки HTTP, всякие приятные плюшки, гарантии инфобеза, которые не надо писать самостоятельно. Кстати, в Kotlin можно использовать асинхронный и легковесный Ktor - правда, у него есть проблема: отсутствует сильная инфраструктура. Поэтому, в отличие от того же Spring, многое приходится дописывать вручную.</p>
13 <p>Каждый из популярных веб-фреймворков всегда рассматривают по канону "готовых плюшек". Например, в Python это Django и AIOHTTP, а в Java - Spring / Spring Boot. Их чаще всего берут за канон, потому что они содержат кучу дополнительных инструментов: авторизацию, cookies, заголовки HTTP, всякие приятные плюшки, гарантии инфобеза, которые не надо писать самостоятельно. Кстати, в Kotlin можно использовать асинхронный и легковесный Ktor - правда, у него есть проблема: отсутствует сильная инфраструктура. Поэтому, в отличие от того же Spring, многое приходится дописывать вручную.</p>
14 <p>Конечно, есть зависимость и от типа задачек: хотите ли вы в одной системе с вебом использовать БД и кэширование, например. Нужна вам MVC, Rest API, или вы вообще хотите выстраивать коммуникации на JSON-RPC. Нужна ли встроенная админка для веба.</p>
14 <p>Конечно, есть зависимость и от типа задачек: хотите ли вы в одной системе с вебом использовать БД и кэширование, например. Нужна вам MVC, Rest API, или вы вообще хотите выстраивать коммуникации на JSON-RPC. Нужна ли встроенная админка для веба.</p>
15 <p>Когда вы выбрали веб-фреймворк, вы фактически выбрали целый стек технологий. Но по своему опыту могу сказать: почти все популярные стеки способны решать более-менее сопоставимый пул задач.</p>
15 <p>Когда вы выбрали веб-фреймворк, вы фактически выбрали целый стек технологий. Но по своему опыту могу сказать: почти все популярные стеки способны решать более-менее сопоставимый пул задач.</p>
16 <p>Выбирая фреймворк, обычно смотрят, даёт ли он следующие возможности и нужны ли они вам в проекте:</p>
16 <p>Выбирая фреймворк, обычно смотрят, даёт ли он следующие возможности и нужны ли они вам в проекте:</p>
17 <ul><li>гибко строить Route,</li>
17 <ul><li>гибко строить Route,</li>
18 <li>работать с REST,</li>
18 <li>работать с REST,</li>
19 <li>работать с cookies и заголовками запросов,</li>
19 <li>работать с cookies и заголовками запросов,</li>
20 <li>работать с телами запросов непосредственно.</li>
20 <li>работать с телами запросов непосредственно.</li>
21 </ul><p>Также стоит обратить внимание вот на что:</p>
21 </ul><p>Также стоит обратить внимание вот на что:</p>
22 <ul><li>удобно ли организована работа с PATH;</li>
22 <ul><li>удобно ли организована работа с PATH;</li>
23 <li>что по CSRF-защите;</li>
23 <li>что по CSRF-защите;</li>
24 <li>что по защите от SQL injection;</li>
24 <li>что по защите от SQL injection;</li>
25 <li>на какой серверный движок завязан фреймворк (Tomcat, Gunicorn, Uvicorn);</li>
25 <li>на какой серверный движок завязан фреймворк (Tomcat, Gunicorn, Uvicorn);</li>
26 <li>есть ли базовые инструменты для авторизации;</li>
26 <li>есть ли базовые инструменты для авторизации;</li>
27 <li>есть ли базовые инструменты для ролей и пользователей;</li>
27 <li>есть ли базовые инструменты для ролей и пользователей;</li>
28 <li>есть ли базовые инструменты для кэширования запросов;</li>
28 <li>есть ли базовые инструменты для кэширования запросов;</li>
29 <li>есть ли возможности редиректов и прочего;</li>
29 <li>есть ли возможности редиректов и прочего;</li>
30 <li>насколько быстро фреймворк отрабатывает запросы и какой у него RPS в принципе.</li>
30 <li>насколько быстро фреймворк отрабатывает запросы и какой у него RPS в принципе.</li>
31 </ul><p>Senior Software Engineer в Layermark.</p>
31 </ul><p>Senior Software Engineer в Layermark.</p>
32 <p>Для бэкенда самыми популярным языками являются JavaScript, Python, Ruby, Java, C#, Go и PHP.</p>
32 <p>Для бэкенда самыми популярным языками являются JavaScript, Python, Ruby, Java, C#, Go и PHP.</p>
33 <p>Для простых проектов и задач выбор языка практически не имеет значения. Времена сложных конфигураций с веб-серверами и XML давно прошли, а с текущими MVC-фреймворками написать простое приложение можно на любом языке. Что на Node.js, что на Spring Boot развернуть веб приложение можно всего за несколько минут.</p>
33 <p>Для простых проектов и задач выбор языка практически не имеет значения. Времена сложных конфигураций с веб-серверами и XML давно прошли, а с текущими MVC-фреймворками написать простое приложение можно на любом языке. Что на Node.js, что на Spring Boot развернуть веб приложение можно всего за несколько минут.</p>
34 <p>Если же вам нужна автоматическая генерация CRUD веб-страниц, можно использовать Ruby on Rails для Ruby или Grails для Java.</p>
34 <p>Если же вам нужна автоматическая генерация CRUD веб-страниц, можно использовать Ruby on Rails для Ruby или Grails для Java.</p>
35 <p>Что касается сложных и объёмных проектов с долгосрочной поддержкой, лучше отдавать предпочтение статически типизированным и компилируемым языкам, таким как C#, Go и Java.</p>
35 <p>Что касается сложных и объёмных проектов с долгосрочной поддержкой, лучше отдавать предпочтение статически типизированным и компилируемым языкам, таким как C#, Go и Java.</p>
36 <p>В больших проектах скорость написания кода не очень важна, зато более приоритетной является скорость анализа при чтении кода и возможности недеструктивного рефакторинга, особенно если вы имеете дело со сложной бизнес-логикой.</p>
36 <p>В больших проектах скорость написания кода не очень важна, зато более приоритетной является скорость анализа при чтении кода и возможности недеструктивного рефакторинга, особенно если вы имеете дело со сложной бизнес-логикой.</p>
37 <p>И наконец, фреймворки ASP.NET для C# и Spring для Java, благодаря большому набору компонентов в DI-экосистеме, предоставляют все возможности для удобного проектирования и точной конфигурации веб-приложения.</p>
37 <p>И наконец, фреймворки ASP.NET для C# и Spring для Java, благодаря большому набору компонентов в DI-экосистеме, предоставляют все возможности для удобного проектирования и точной конфигурации веб-приложения.</p>
38 <p>При выборе языка и фреймворка для бэкенда обычно учитывают следующие критерии:</p>
38 <p>При выборе языка и фреймворка для бэкенда обычно учитывают следующие критерии:</p>
39 <p><strong>Размер и сложность проекта.</strong>Если это небольшой проект или MVP, когда стоят короткие сроки выполнение проекта, то можно выбирать тот язык и фреймворк, в которых есть знание у команды или легко найти специалистов на рынке. Очень часто, особенно на аутсорсе, решение принимается в зависимости от отдела, куда попадает проект. К примеру, один и тот же проект может быть сделан с использованием как Java, так и .NET.</p>
39 <p><strong>Размер и сложность проекта.</strong>Если это небольшой проект или MVP, когда стоят короткие сроки выполнение проекта, то можно выбирать тот язык и фреймворк, в которых есть знание у команды или легко найти специалистов на рынке. Очень часто, особенно на аутсорсе, решение принимается в зависимости от отдела, куда попадает проект. К примеру, один и тот же проект может быть сделан с использованием как Java, так и .NET.</p>
40 <p><strong>Тип проекта.</strong>Разные типы проектов требуют различных технологий. К примеру, приложения с интенсивным использованием данных, системы бронирования, приложения для социальных сетей, потоковые приложения, CMS, IoT, приложения в банковской сфере, торговые площадки и простые MVP, скорее всего, потребуют различных языков программирования и фреймворков.</p>
40 <p><strong>Тип проекта.</strong>Разные типы проектов требуют различных технологий. К примеру, приложения с интенсивным использованием данных, системы бронирования, приложения для социальных сетей, потоковые приложения, CMS, IoT, приложения в банковской сфере, торговые площадки и простые MVP, скорее всего, потребуют различных языков программирования и фреймворков.</p>
41 <p><strong>Стоимость.</strong>Многие технологии, фреймворки и среды разработки требуют лицензии, но есть и много бесплатных вариантов. На практике, скорее всего, у вас будет выбор между платными инструментами, но с б<strong>о</strong>льшей функциональностью и поддержкой, или бесплатные, но с ограниченным набором функций.</p>
41 <p><strong>Стоимость.</strong>Многие технологии, фреймворки и среды разработки требуют лицензии, но есть и много бесплатных вариантов. На практике, скорее всего, у вас будет выбор между платными инструментами, но с б<strong>о</strong>льшей функциональностью и поддержкой, или бесплатные, но с ограниченным набором функций.</p>
42 <p>В моей практике чаще всего всё зависело от языка программирования, которым владеет команда. Если команда пишет на C#, то и весь стек связан с платформой .NET. Если команда пишет на Java, то и фреймворки, соответственно, Spring, Hibernate и так далее.</p>
42 <p>В моей практике чаще всего всё зависело от языка программирования, которым владеет команда. Если команда пишет на C#, то и весь стек связан с платформой .NET. Если команда пишет на Java, то и фреймворки, соответственно, Spring, Hibernate и так далее.</p>
43 <p>Ещё бы я разделил проекты на корпоративные и не корпоративные. Существует мнение, что корпоративные проекты чаще всего пишутся на Java или .NET. Хотя в последнее время такие языки и фреймворки, как Go, Node.js и Python, составляют достойную конкуренцию по многим параметрам.</p>
43 <p>Ещё бы я разделил проекты на корпоративные и не корпоративные. Существует мнение, что корпоративные проекты чаще всего пишутся на Java или .NET. Хотя в последнее время такие языки и фреймворки, как Go, Node.js и Python, составляют достойную конкуренцию по многим параметрам.</p>
44 <p>Senior Software Engineer/Technical Lead.</p>
44 <p>Senior Software Engineer/Technical Lead.</p>
45 <p>При выборе фреймворка или языка программирования необходимо всегда обращать внимание в первую очередь на его популярность и наличие экспертов в команде (или на рынке). Это позволит в будущем избежать проблем с поиском кадров. Можно выбрать в качестве языка, например, Scala или Clojure, которые, безусловно, имеют свои сильные стороны относительно консервативной Java, но потом столкнуться с серьёзной проблемой поиска специалистов, когда необходимо будет усилить команду или заменить сотрудников, которые решили покинуть проект.</p>
45 <p>При выборе фреймворка или языка программирования необходимо всегда обращать внимание в первую очередь на его популярность и наличие экспертов в команде (или на рынке). Это позволит в будущем избежать проблем с поиском кадров. Можно выбрать в качестве языка, например, Scala или Clojure, которые, безусловно, имеют свои сильные стороны относительно консервативной Java, но потом столкнуться с серьёзной проблемой поиска специалистов, когда необходимо будет усилить команду или заменить сотрудников, которые решили покинуть проект.</p>
46 <p>Второй момент - это зрелость продукта. Всегда хочется использовать что-то новое и модное, но стоит быть готовым к тому, что молодой продукт может иметь достаточно серьёзные баги. Существуют примеры, когда необходимые доработки фреймворка ждут исправления месяцы, а то и годы. Не стоит также исключать, что в какой-то момент разработка фреймворка может быть остановлена. На мой взгляд, всегда стоит отдавать предпочтение проверенным временем продуктам. В качестве примера можно привести Java и Spring. Это практически стандарт де-факто в разработке бизнес-сервисов. Огромная накопленная база знаний сводит почти к нулю вероятность столкнуться с неразрешимой проблемой.</p>
46 <p>Второй момент - это зрелость продукта. Всегда хочется использовать что-то новое и модное, но стоит быть готовым к тому, что молодой продукт может иметь достаточно серьёзные баги. Существуют примеры, когда необходимые доработки фреймворка ждут исправления месяцы, а то и годы. Не стоит также исключать, что в какой-то момент разработка фреймворка может быть остановлена. На мой взгляд, всегда стоит отдавать предпочтение проверенным временем продуктам. В качестве примера можно привести Java и Spring. Это практически стандарт де-факто в разработке бизнес-сервисов. Огромная накопленная база знаний сводит почти к нулю вероятность столкнуться с неразрешимой проблемой.</p>
47 <p>Стоить отметить, что в современной архитектуре приложений всё больше используется микросервисный подход. Он позволяет разделить большое приложение на много маленьких сервисов. Это позволяет многократно снизить последствия от неправильно выбранного языка программирования или фреймворка, и позволяет развязать руки в экспериментировании. Так как сервис мал, то в любой момент его можно достаточно быстро переписать.</p>
47 <p>Стоить отметить, что в современной архитектуре приложений всё больше используется микросервисный подход. Он позволяет разделить большое приложение на много маленьких сервисов. Это позволяет многократно снизить последствия от неправильно выбранного языка программирования или фреймворка, и позволяет развязать руки в экспериментировании. Так как сервис мал, то в любой момент его можно достаточно быстро переписать.</p>
48 <p>Всегда стоит сохранять прагматичный подход к решению проблемы. При выборе того или иного продукта взвешивать преимущества и возможные негативные последствия на дальнейшую разработку.</p>
48 <p>Всегда стоит сохранять прагматичный подход к решению проблемы. При выборе того или иного продукта взвешивать преимущества и возможные негативные последствия на дальнейшую разработку.</p>
49 <p>Занимается платформенной разработкой в "Авито". Пишет на Go и Python. Интересуется инфраструктурой, архитектурой распределённых приложений, построением отказоустойчивых сервисов, микросервисной архитектурой, DevOps. Ведёт телеграм-канал "<a>Техлидошная</a>".</p>
49 <p>Занимается платформенной разработкой в "Авито". Пишет на Go и Python. Интересуется инфраструктурой, архитектурой распределённых приложений, построением отказоустойчивых сервисов, микросервисной архитектурой, DevOps. Ведёт телеграм-канал "<a>Техлидошная</a>".</p>
50 <p>Выбор фреймворка, равно как и языка программирования, зависит от множества факторов. Я приведу основные, самые значимые, на которые смотрю сам.</p>
50 <p>Выбор фреймворка, равно как и языка программирования, зависит от множества факторов. Я приведу основные, самые значимые, на которые смотрю сам.</p>
51 <p><strong>Востребованность технологии.</strong>Насколько много вакансий на рынке, какие в среднем зарплаты. Причём лучше посмотреть по разным странам. Например, PHP-фреймворк Laravel очень популярен на Западе и сильно обгоняет своего конкурента Symfony, а значит, работу на нём будет находить значительно проще. А вот Yii имеет некоторую популярность только в России - да и то вакансий немного.</p>
51 <p><strong>Востребованность технологии.</strong>Насколько много вакансий на рынке, какие в среднем зарплаты. Причём лучше посмотреть по разным странам. Например, PHP-фреймворк Laravel очень популярен на Западе и сильно обгоняет своего конкурента Symfony, а значит, работу на нём будет находить значительно проще. А вот Yii имеет некоторую популярность только в России - да и то вакансий немного.</p>
52 <p><strong>Порог входа.</strong>От этого зависит то, насколько быстро можно начать зарабатывать на этой технологии и решать реальные задачи. Например, у языка Java достаточно высокий порог входа, и даже если у вас за плечами несколько лет опыта в кодинге на другом языке программирования, не факт, что получится быстро перепрыгнуть в Java и сохранить уровень дохода.</p>
52 <p><strong>Порог входа.</strong>От этого зависит то, насколько быстро можно начать зарабатывать на этой технологии и решать реальные задачи. Например, у языка Java достаточно высокий порог входа, и даже если у вас за плечами несколько лет опыта в кодинге на другом языке программирования, не факт, что получится быстро перепрыгнуть в Java и сохранить уровень дохода.</p>
53 <p><strong>Требования.</strong>Важно понимать, что от вас ждёт работодатель, и обычно это прописывается в вакансиях. Сколько лет опыта должно быть, нужно ли техническое образование и так далее. Например, при разработке хранилищ данных, скорее всего, без математического образования обойтись не получится.</p>
53 <p><strong>Требования.</strong>Важно понимать, что от вас ждёт работодатель, и обычно это прописывается в вакансиях. Сколько лет опыта должно быть, нужно ли техническое образование и так далее. Например, при разработке хранилищ данных, скорее всего, без математического образования обойтись не получится.</p>
54 <p><strong>Перспективность.</strong>Технологии могут устаревать и терять востребованность. Важно смотреть за динамикой роста популярности языков программирования и фреймворков. Например, Python держит позиции за счёт развивающегося направления машинного обучения, и вкладываться в него точно имеет смысл. Язык Go всё чаще используется для микросервисов в крупных компаниях, но нет гарантий, что этот тренд сохранится надолго.</p>
54 <p><strong>Перспективность.</strong>Технологии могут устаревать и терять востребованность. Важно смотреть за динамикой роста популярности языков программирования и фреймворков. Например, Python держит позиции за счёт развивающегося направления машинного обучения, и вкладываться в него точно имеет смысл. Язык Go всё чаще используется для микросервисов в крупных компаниях, но нет гарантий, что этот тренд сохранится надолго.</p>
55 <p><strong>Интерес.</strong>Конечно, нельзя добиться весомых результатов, работая с тем, что не драйвит и не вызывает интереса. Поэтому это очень важный пункт. Но учтите, что интересы со временем могут меняться - и это нормально.</p>
55 <p><strong>Интерес.</strong>Конечно, нельзя добиться весомых результатов, работая с тем, что не драйвит и не вызывает интереса. Поэтому это очень важный пункт. Но учтите, что интересы со временем могут меняться - и это нормально.</p>
56 <p>Основатель и коммерческий директор компании "Брендпорт".</p>
56 <p>Основатель и коммерческий директор компании "Брендпорт".</p>
57 <p>Мы выбираем фреймворк, задаваясь простым вопросом: "Какие потребности у заказчика?" Если заказчик может указать в техзадании пожелания по языку программирования и фреймворку, то в большинстве случаев мы будем работать с этими пожеланиями. Если же у заказчика нет определённых предпочтений, требований или он предлагает не очень подходящий под задачу, по нашему мнению, фреймворк, мы предложим продукт, на котором специализируется наша команда.</p>
57 <p>Мы выбираем фреймворк, задаваясь простым вопросом: "Какие потребности у заказчика?" Если заказчик может указать в техзадании пожелания по языку программирования и фреймворку, то в большинстве случаев мы будем работать с этими пожеланиями. Если же у заказчика нет определённых предпочтений, требований или он предлагает не очень подходящий под задачу, по нашему мнению, фреймворк, мы предложим продукт, на котором специализируется наша команда.</p>
58 <p>И если до этого мы уже реализовали несколько проектов, например, на связке React + Django (бэкенд на Django и фронтенд на React), то будем предлагать такой вариант заказчику, а также усиливать свою команду в этом направлении.</p>
58 <p>И если до этого мы уже реализовали несколько проектов, например, на связке React + Django (бэкенд на Django и фронтенд на React), то будем предлагать такой вариант заказчику, а также усиливать свою команду в этом направлении.</p>
59 <p>При разработке нового продукта программист решает ряд типовых и архитектурных задач. Суть в том, что они обычно требуют похожих реализаций от проекта к проекту. Чтобы ускорить процесс разработки продукта и не дублировать ненужный код, на помощь программистам приходят фреймворки. Они реализуют низкоуровневые задачи, позволяя приступить к закрытию бизнес-потребности. При выборе инструментов обратите внимание на следующие параметры:</p>
59 <p>При разработке нового продукта программист решает ряд типовых и архитектурных задач. Суть в том, что они обычно требуют похожих реализаций от проекта к проекту. Чтобы ускорить процесс разработки продукта и не дублировать ненужный код, на помощь программистам приходят фреймворки. Они реализуют низкоуровневые задачи, позволяя приступить к закрытию бизнес-потребности. При выборе инструментов обратите внимание на следующие параметры:</p>
60 <ul><li>скорость работы;</li>
60 <ul><li>скорость работы;</li>
61 <li>масштабируемость;</li>
61 <li>масштабируемость;</li>
62 <li>частота обновления;</li>
62 <li>частота обновления;</li>
63 <li>удобство использования и поддержка кода.</li>
63 <li>удобство использования и поддержка кода.</li>
64 </ul><p>Я работаю на Node.js более пяти лет. И за это время выделил три самых удачных инструмента в разработке на этой платформе.</p>
64 </ul><p>Я работаю на Node.js более пяти лет. И за это время выделил три самых удачных инструмента в разработке на этой платформе.</p>
65 <p>Фреймворк, ориентированный на обработку HTTP-запросов. По заявлениям разработчиков, является самым быстрым и способен держать нагрузку порядка 60k RPS в тестах. Поддерживает "из коробки" возможность валидации тела JSON и запросов TypeScript, а также может описывать логику в стиле async/await - делает код более читаемым. Имеет обширный набор пользовательских плагинов, среди которых работа с базами данных и очередями. Большим плюсом являются также частые обновления и поддержка фреймворка разработчиками.</p>
65 <p>Фреймворк, ориентированный на обработку HTTP-запросов. По заявлениям разработчиков, является самым быстрым и способен держать нагрузку порядка 60k RPS в тестах. Поддерживает "из коробки" возможность валидации тела JSON и запросов TypeScript, а также может описывать логику в стиле async/await - делает код более читаемым. Имеет обширный набор пользовательских плагинов, среди которых работа с базами данных и очередями. Большим плюсом являются также частые обновления и поддержка фреймворка разработчиками.</p>
66 <p>Отличный инструмент для работы с реляционными базами, среди которых на данный момент PostgreSQL, MySQL, Microsoft SQL Server, Oracle Database. Что примечательно, поддерживает MongoDB, но пока в экспериментальном режиме.</p>
66 <p>Отличный инструмент для работы с реляционными базами, среди которых на данный момент PostgreSQL, MySQL, Microsoft SQL Server, Oracle Database. Что примечательно, поддерживает MongoDB, но пока в экспериментальном режиме.</p>
67 <p>Данный фреймворк позволяет описывать структуру базы данных в виде классов (сущностей) и определять между ними отношения, используя TypeScript-декораторы.</p>
67 <p>Данный фреймворк позволяет описывать структуру базы данных в виде классов (сущностей) и определять между ними отношения, используя TypeScript-декораторы.</p>
68 <p>Предназначен для работы с WebSocket-соединениями. Для этого фреймворка необходимы клиентские библиотеки Socket.IO на стороне фронтенда.</p>
68 <p>Предназначен для работы с WebSocket-соединениями. Для этого фреймворка необходимы клиентские библиотеки Socket.IO на стороне фронтенда.</p>
69 <p>Инструмент позволяет выстроить удобную работу с асинхронным обменом данными между сервером и клиентом. Опционально возможно использование таких транспортов для передачи данных, как Pooling или WebSocket. Библиотека позволяет объединять соединения в комнаты и рассылать данные в рамках комнаты либо в конкретное соединение.</p>
69 <p>Инструмент позволяет выстроить удобную работу с асинхронным обменом данными между сервером и клиентом. Опционально возможно использование таких транспортов для передачи данных, как Pooling или WebSocket. Библиотека позволяет объединять соединения в комнаты и рассылать данные в рамках комнаты либо в конкретное соединение.</p>
70 <p>Интересной фичей является поддержка горизонтального масштабирования "из коробки" на серверной стороне. Это реализовано через Redis adapter, который объединяет одинаковые комнаты, находящиеся на разных инстансах бэкенда, и позволяет работать с соединениями таким образом, как если бы они были на одной машине.</p>
70 <p>Интересной фичей является поддержка горизонтального масштабирования "из коробки" на серверной стороне. Это реализовано через Redis adapter, который объединяет одинаковые комнаты, находящиеся на разных инстансах бэкенда, и позволяет работать с соединениями таким образом, как если бы они были на одной машине.</p>
71 <p>Fullstack Software Engineer в Mapbox.</p>
71 <p>Fullstack Software Engineer в Mapbox.</p>
72 <p>Для написания бэкенда на JS сейчас есть три наиболее сильных фреймворка<a>NestJS</a>,<a>Express</a>и <a>Fastify</a>.</p>
72 <p>Для написания бэкенда на JS сейчас есть три наиболее сильных фреймворка<a>NestJS</a>,<a>Express</a>и <a>Fastify</a>.</p>
73 <p><strong>Express</strong>очень прост, быстр, и почти каждый JS-разработчик так или иначе знаком с ним. Но его функциональность "из коробки" очень скудная и нужен большой опыт для того, чтобы закрыть все свои потребности. Этот фреймворк хорошо подходит в тех случаях, когда необходимо написать сервер для чего-то простого - статические файлы, прокси и тому подобного.</p>
73 <p><strong>Express</strong>очень прост, быстр, и почти каждый JS-разработчик так или иначе знаком с ним. Но его функциональность "из коробки" очень скудная и нужен большой опыт для того, чтобы закрыть все свои потребности. Этот фреймворк хорошо подходит в тех случаях, когда необходимо написать сервер для чего-то простого - статические файлы, прокси и тому подобного.</p>
74 <p><strong>Fastify</strong>предоставляет больше функциональности "из коробки", но и порог входа у него выше. Этот фреймворк уже хорош для написания больших приложений. Также он может похвастаться своей скоростью.</p>
74 <p><strong>Fastify</strong>предоставляет больше функциональности "из коробки", но и порог входа у него выше. Этот фреймворк уже хорош для написания больших приложений. Также он может похвастаться своей скоростью.</p>
75 <p>Для написания больших и сложных приложений лучше использовать<strong>NestJS</strong>. Этот фреймворк полностью написан на TypeScript, что помогает в разработке. Также он предлагает грамотную архитектуру с dependency injection.</p>
75 <p>Для написания больших и сложных приложений лучше использовать<strong>NestJS</strong>. Этот фреймворк полностью написан на TypeScript, что помогает в разработке. Также он предлагает грамотную архитектуру с dependency injection.</p>
76 <p>В Mapbox в большинстве приложений мы используем NestJS и Express. И здесь выбор зависит только от размера и сложности приложения.</p>
76 <p>В Mapbox в большинстве приложений мы используем NestJS и Express. И здесь выбор зависит только от размера и сложности приложения.</p>
77 <p>На чистом PHP уже почти никто не пишет. Вместо этого используют фреймворки - наборы пакетов и библиотек, которые задают каркас проекта. С помощью фреймворка можно быстро создавать шаблонные страницы, блоки сайта или приложения.</p>
77 <p>На чистом PHP уже почти никто не пишет. Вместо этого используют фреймворки - наборы пакетов и библиотек, которые задают каркас проекта. С помощью фреймворка можно быстро создавать шаблонные страницы, блоки сайта или приложения.</p>
78 <p>Например, чтобы добавить на сайт авторизацию пользователей, на чистом PHP пришлось бы написать десятки строк кода и продумать механизмы безопасности. А с фреймворком нужно лишь прописать несколько методов и указать необходимые параметры в настройках. При этом в шаблоне уже будет встроена система безопасности, стойкая ко взломам.</p>
78 <p>Например, чтобы добавить на сайт авторизацию пользователей, на чистом PHP пришлось бы написать десятки строк кода и продумать механизмы безопасности. А с фреймворком нужно лишь прописать несколько методов и указать необходимые параметры в настройках. При этом в шаблоне уже будет встроена система безопасности, стойкая ко взломам.</p>
79 <p>Ещё фреймворки помогают сохранять данные в сессии, читать параметры из адресной строки браузера, обрабатывать файлы в директории и подключаться к базам данных. У них есть методы для работы с файлами на диске, поэтому программисту не нужно писать функции для поиска и фильтрации. А ещё можно за пару шагов валидировать пользовательские данные (например, имя, email или комментарии в форме обратной связи) и обработать для дальнейшего использования.</p>
79 <p>Ещё фреймворки помогают сохранять данные в сессии, читать параметры из адресной строки браузера, обрабатывать файлы в директории и подключаться к базам данных. У них есть методы для работы с файлами на диске, поэтому программисту не нужно писать функции для поиска и фильтрации. А ещё можно за пару шагов валидировать пользовательские данные (например, имя, email или комментарии в форме обратной связи) и обработать для дальнейшего использования.</p>
80 <p>Для PHP написано более 20 фреймворков, но чаще всего в энтерпрайзе используют следующие:</p>
80 <p>Для PHP написано более 20 фреймворков, но чаще всего в энтерпрайзе используют следующие:</p>
81 <ul><li><a>Laravel</a> - самый популярный фреймворк PHP, создан в 2011 году;</li>
81 <ul><li><a>Laravel</a> - самый популярный фреймворк PHP, создан в 2011 году;</li>
82 <li><a>Symfony</a> - славится надёжностью и соответствием веб-стандартам;</li>
82 <li><a>Symfony</a> - славится надёжностью и соответствием веб-стандартам;</li>
83 <li><a>Laminas</a>(потомок Zend Framework) - позволяет подключать много сторонних библиотек, но немного сложнее остальных фреймворков;</li>
83 <li><a>Laminas</a>(потомок Zend Framework) - позволяет подключать много сторонних библиотек, но немного сложнее остальных фреймворков;</li>
84 <li><a>Yii2</a> - считается самым быстрым фреймворком PHP;</li>
84 <li><a>Yii2</a> - считается самым быстрым фреймворком PHP;</li>
85 <li><a>CodeIgniter</a> - один из самых простых в изучении.</li>
85 <li><a>CodeIgniter</a> - один из самых простых в изучении.</li>
86 </ul><p>Фреймворки различаются реализацией основных модулей, но во многом похожи: строятся по схожей архитектуре и даже содержат одинаковые библиотеки под капотом. На сайтах каждого вы найдёте подробные инструкции и документацию, где написано, как установить и использовать пакеты и библиотеки. Кроме того, у фреймворков в Сети есть огромные комьюнити разработчиков и базы знаний.</p>
86 </ul><p>Фреймворки различаются реализацией основных модулей, но во многом похожи: строятся по схожей архитектуре и даже содержат одинаковые библиотеки под капотом. На сайтах каждого вы найдёте подробные инструкции и документацию, где написано, как установить и использовать пакеты и библиотеки. Кроме того, у фреймворков в Сети есть огромные комьюнити разработчиков и базы знаний.</p>
87 <p>.NET-разработчик, после 24 февраля переехал в Ереван вместе с компанией, в которой работает. Ведёт<a>телеграм-канал</a>об IT и программировании.</p>
87 <p>.NET-разработчик, после 24 февраля переехал в Ереван вместе с компанией, в которой работает. Ведёт<a>телеграм-канал</a>об IT и программировании.</p>
88 <p>Сначала нужно понять, что представляет собой проект. Но как по мне, проще и быстрее всего развернуть бэкенд на ASP.NET - к тому же и настраивать его очень несложно. Всё необходимое ставится "из коробки", нужно только указать домен и порты, которые будет прослушивать собранное решение. Необходимые комплекты библиотек тоже будут подключены автоматически.</p>
88 <p>Сначала нужно понять, что представляет собой проект. Но как по мне, проще и быстрее всего развернуть бэкенд на ASP.NET - к тому же и настраивать его очень несложно. Всё необходимое ставится "из коробки", нужно только указать домен и порты, которые будет прослушивать собранное решение. Необходимые комплекты библиотек тоже будут подключены автоматически.</p>
89 <p>Идеально работает связка ASP.NET + Entity Framework + PostgreSQL. ASP.NET Core использует DI-контейнеры практически по умолчанию - и это неоспоримое преимущество, потому что созданием классом занимаются специальные фабрики под капотом самого фреймворка.</p>
89 <p>Идеально работает связка ASP.NET + Entity Framework + PostgreSQL. ASP.NET Core использует DI-контейнеры практически по умолчанию - и это неоспоримое преимущество, потому что созданием классом занимаются специальные фабрики под капотом самого фреймворка.</p>
90 <p>Entity Framework позволит упростить работу с базами данных и прямо из кода создавать таблицы, а PostgreSQL даст быстрый доступ к данным, к тому же он быстро разворачивается и настраивается. Для публикации такого решения на тестовый или продакшен-серверы можно воспользоваться контейнерами в Docker - правда, в этом случае придётся повозиться с написанием Dockerfile и контейнеризацией полученных библиотек при сборке решения воедино.</p>
90 <p>Entity Framework позволит упростить работу с базами данных и прямо из кода создавать таблицы, а PostgreSQL даст быстрый доступ к данным, к тому же он быстро разворачивается и настраивается. Для публикации такого решения на тестовый или продакшен-серверы можно воспользоваться контейнерами в Docker - правда, в этом случае придётся повозиться с написанием Dockerfile и контейнеризацией полученных библиотек при сборке решения воедино.</p>
91 <p>Коммерческий директор маркетингового агентства MediaNation и руководитель проекта сквозной аналитики StreamMyData.</p>
91 <p>Коммерческий директор маркетингового агентства MediaNation и руководитель проекта сквозной аналитики StreamMyData.</p>
92 <p>Когда мы делали бэкенд для своего проекта StreamMyData, то выбрали платформу .NET Core 6.0. Выбор этой платформы частично связан с тем, что в копилке нашего агентства уже было достаточно много коннекторов, написанных на C#, - в предыдущих версиях фреймворка.</p>
92 <p>Когда мы делали бэкенд для своего проекта StreamMyData, то выбрали платформу .NET Core 6.0. Выбор этой платформы частично связан с тем, что в копилке нашего агентства уже было достаточно много коннекторов, написанных на C#, - в предыдущих версиях фреймворка.</p>
93 <p>При этом ядро проекта было спроектировано таким образом, чтобы в будущем можно было писать коннекторы на любом языке программирования и использовать другие фреймворки. Получилось достаточно гибкое решение, которое позволит диверсифицировать технологических стек.</p>
93 <p>При этом ядро проекта было спроектировано таким образом, чтобы в будущем можно было писать коннекторы на любом языке программирования и использовать другие фреймворки. Получилось достаточно гибкое решение, которое позволит диверсифицировать технологических стек.</p>
94 <p>Старший бэкенд-разработчик в space307, основатель influence.su.</p>
94 <p>Старший бэкенд-разработчик в space307, основатель influence.su.</p>
95 <p>Будем честны, на практике почти всегда язык программирования и фреймворк для бэкенда выбираются, исходя из личных предпочтений и умений, а не из требований под конкретную задачу.</p>
95 <p>Будем честны, на практике почти всегда язык программирования и фреймворк для бэкенда выбираются, исходя из личных предпочтений и умений, а не из требований под конкретную задачу.</p>
96 <p>Например, в идеальном мире, если нужно написать большую сложную систему, то следовало бы взять Java Spring Framework - просто потому, что практически все необходимые инструменты будут "из коробки". А если необходимо реализовать веб-сокет-сервис, то стоит смотреть в сторону NodeJS (Socket.IO) и Go.</p>
96 <p>Например, в идеальном мире, если нужно написать большую сложную систему, то следовало бы взять Java Spring Framework - просто потому, что практически все необходимые инструменты будут "из коробки". А если необходимо реализовать веб-сокет-сервис, то стоит смотреть в сторону NodeJS (Socket.IO) и Go.</p>
97 <p>Моё предпочтение на сегодняшний день - это Go, главное преимущество которого - интуитивно-понятное написание асинхронного кода. Но лёгким написанием кода всё не ограничивается. При запуске приложения асинхронный код превращается в горутины ("зелёные" потоки), которые позволяют обрабатывать тысячи запросов в секунду, не теряя производительности.</p>
97 <p>Моё предпочтение на сегодняшний день - это Go, главное преимущество которого - интуитивно-понятное написание асинхронного кода. Но лёгким написанием кода всё не ограничивается. При запуске приложения асинхронный код превращается в горутины ("зелёные" потоки), которые позволяют обрабатывать тысячи запросов в секунду, не теряя производительности.</p>
98 <p>Хоть стандартная библиотека в Go содержит всё необходимое, начать новый проект будет проще, используя готовый микрофреймворк. Один из самых популярных - это<a>Fiber</a>. Фреймворк создавался по подобию Express (популярный за свою простоту фреймворк из мира Node.js), что даёт возможность фокусироваться на бизнес-логике приложения.</p>
98 <p>Хоть стандартная библиотека в Go содержит всё необходимое, начать новый проект будет проще, используя готовый микрофреймворк. Один из самых популярных - это<a>Fiber</a>. Фреймворк создавался по подобию Express (популярный за свою простоту фреймворк из мира Node.js), что даёт возможность фокусироваться на бизнес-логике приложения.</p>
99 <p>Но помимо простоты Fiber является самым производительным микрофреймворком для обработки HTTP-запросов на Go. Дело в том, что для обработки запросов Fiber использует библиотеку<a>fasthttp</a>, которая не аллоцирует память и горутины под каждый новый запрос. Например, компания VertaMedia обрабатывает 200k RPS (запросов в секунду) от более чем 1,5 миллиона keep-alive-соединений в продакшене с помощью fasthttp.</p>
99 <p>Но помимо простоты Fiber является самым производительным микрофреймворком для обработки HTTP-запросов на Go. Дело в том, что для обработки запросов Fiber использует библиотеку<a>fasthttp</a>, которая не аллоцирует память и горутины под каждый новый запрос. Например, компания VertaMedia обрабатывает 200k RPS (запросов в секунду) от более чем 1,5 миллиона keep-alive-соединений в продакшене с помощью fasthttp.</p>
100 <p>Помимо простоты написания бизнес-логики и высокой производительности, Fiber интегрирован с множеством сторонних библиотек, что позволяет парой строчек кода использовать ограничители запросов, логирование, настраивать CORS, мониторинг и многое другое. Всё это в совокупности даёт базу для быстрой разработки производительного современного бэкенда.</p>
100 <p>Помимо простоты написания бизнес-логики и высокой производительности, Fiber интегрирован с множеством сторонних библиотек, что позволяет парой строчек кода использовать ограничители запросов, логирование, настраивать CORS, мониторинг и многое другое. Всё это в совокупности даёт базу для быстрой разработки производительного современного бэкенда.</p>
101 <p>Java-разработчик в Holyweb. Опыт в коммерческой разработке - три года.</p>
101 <p>Java-разработчик в Holyweb. Опыт в коммерческой разработке - три года.</p>
102 <p>Java лучше всего подходит для крупных проектов, фреймворков, высоконагруженных приложений и сервисов. В первую очередь благодаря таким своим свойствам:</p>
102 <p>Java лучше всего подходит для крупных проектов, фреймворков, высоконагруженных приложений и сервисов. В первую очередь благодаря таким своим свойствам:</p>
103 <ul><li>Кросс-платформенность. Java-приложение можно запустить на любой платформе, где установлена JVM.</li>
103 <ul><li>Кросс-платформенность. Java-приложение можно запустить на любой платформе, где установлена JVM.</li>
104 <li>Объектно-ориентированный язык, который подходит для крупных приложений/экосистем, которым нужна долгосрочная поддержка после выхода в продакшен.</li>
104 <li>Объектно-ориентированный язык, который подходит для крупных приложений/экосистем, которым нужна долгосрочная поддержка после выхода в продакшен.</li>
105 <li>Статическая типизация, которая также поможет при написании сложных, крупных проектов с долгосрочной поддержкой.</li>
105 <li>Статическая типизация, которая также поможет при написании сложных, крупных проектов с долгосрочной поддержкой.</li>
106 <li>Поддержка многопоточности. Позволяет реализовать высоконагруженные сервисы и приложения.</li>
106 <li>Поддержка многопоточности. Позволяет реализовать высоконагруженные сервисы и приложения.</li>
107 </ul><p>Какие основные фреймворки существуют в Java. Джентльменский набор фреймворков для Java - это Spring Framework, Spring Boot, Java Concurrency, Hibernate.</p>
107 </ul><p>Какие основные фреймворки существуют в Java. Джентльменский набор фреймворков для Java - это Spring Framework, Spring Boot, Java Concurrency, Hibernate.</p>
108 <ul><li>Spring Framework - основной фреймворк. Реализует важнейшие паттерны разработки, такие как фабрика и внедрение зависимостей.</li>
108 <ul><li>Spring Framework - основной фреймворк. Реализует важнейшие паттерны разработки, такие как фабрика и внедрение зависимостей.</li>
109 <li>Spring Boot автоматизирует процедуру настройки и ускоряет процесс создания и развёртывания Spring-приложений.</li>
109 <li>Spring Boot автоматизирует процедуру настройки и ускоряет процесс создания и развёртывания Spring-приложений.</li>
110 <li>Java Concurrency - набор инструментов по созданию многопоточных приложений.</li>
110 <li>Java Concurrency - набор инструментов по созданию многопоточных приложений.</li>
111 <li>Hibernate - фреймворк, который связывает ООП-сущности из Java-кода с таблицами в реляционных базах данных.</li>
111 <li>Hibernate - фреймворк, который связывает ООП-сущности из Java-кода с таблицами в реляционных базах данных.</li>
112 </ul><p>Сам я больше всего работаю со Spring Framework. Он позволяет создавать приложение, правильное с точки зрения паттернов, а также предоставляет функциональность для решения задач, связанных с инициализацией и настройкой объектов, автоматизацией процесса запуска и развёртки приложения.</p>
112 </ul><p>Сам я больше всего работаю со Spring Framework. Он позволяет создавать приложение, правильное с точки зрения паттернов, а также предоставляет функциональность для решения задач, связанных с инициализацией и настройкой объектов, автоматизацией процесса запуска и развёртки приложения.</p>
113 <p>Очевидный недостаток фреймворка - это сложность. В остальном Spring Framework оставляет приятные впечатления при работе. Главный совет - читайте документацию. Она является полным и достоверным источником информации.</p>
113 <p>Очевидный недостаток фреймворка - это сложность. В остальном Spring Framework оставляет приятные впечатления при работе. Главный совет - читайте документацию. Она является полным и достоверным источником информации.</p>
114 <p>Пример из моего опыта: требовалось получить из родительского класса значение поля из самого младшего объекта во всей иерархии. Каким будет самый младший объект по порядку наследования - неизвестно.</p>
114 <p>Пример из моего опыта: требовалось получить из родительского класса значение поля из самого младшего объекта во всей иерархии. Каким будет самый младший объект по порядку наследования - неизвестно.</p>
115 <p>Несколько дней разработки сложной функции закончились её удалением. Из документации выяснилось, что метод @PostConstruct, прописанный в родительском классе, вызывается для всех классов иерархии, которые являются бинами. Поэтому проблема быстро решалась вызовом this, аннотированным @PostConstruct.</p>
115 <p>Несколько дней разработки сложной функции закончились её удалением. Из документации выяснилось, что метод @PostConstruct, прописанный в родительском классе, вызывается для всех классов иерархии, которые являются бинами. Поэтому проблема быстро решалась вызовом this, аннотированным @PostConstruct.</p>
116 <p>При выборе языка программирования отталкивайтесь от целей проекта. Неправильный выбор языка на старте приводит к большим потерям при поддержке и рефакторинге проекта в будущем. Для долгосрочного проекта с большим бюджетом лучше использовать Java или C#. Они регулярно обновляются и имеют большую базу знаний на профильных ресурсах.</p>
116 <p>При выборе языка программирования отталкивайтесь от целей проекта. Неправильный выбор языка на старте приводит к большим потерям при поддержке и рефакторинге проекта в будущем. Для долгосрочного проекта с большим бюджетом лучше использовать Java или C#. Они регулярно обновляются и имеют большую базу знаний на профильных ресурсах.</p>
117 <p>В проектах, для которых категорически важна производительность, лучше обратить внимание на Go и C++. Если требуется написать PoC или небольшой стартап, то есть скорость запуска в приоритете, обратите внимание на Python.</p>
117 <p>В проектах, для которых категорически важна производительность, лучше обратить внимание на Go и C++. Если требуется написать PoC или небольшой стартап, то есть скорость запуска в приоритете, обратите внимание на Python.</p>
118 <p>Взгляните на Opal - в частности, посмотрите<a>список фреймворков</a>. Разработчики Rails немного поколдовали, и теперь Opal можно использовать с Rails. В свою очередь, разработчики Opal Core также открыты для предложений по упрощению использования их решения вместе с Rails - если кто-то посчитает, что порог входа в него слишком высокий.</p>
118 <p>Взгляните на Opal - в частности, посмотрите<a>список фреймворков</a>. Разработчики Rails немного поколдовали, и теперь Opal можно использовать с Rails. В свою очередь, разработчики Opal Core также открыты для предложений по упрощению использования их решения вместе с Rails - если кто-то посчитает, что порог входа в него слишком высокий.</p>
119 <p>Пользователь<a>ylluminate</a>, Reddit</p>
119 <p>Пользователь<a>ylluminate</a>, Reddit</p>
120 <p>Если вы хотите писать фронтенд на Elm, а бэкенд на Haskell, вы наверняка захотите выбрать REST-like-клиент для бэкенда. Для простых приложений и для новичков в Haskell хорошим выбором будет<a>scotty</a>. Если же выходите работать исключительно с фреймворками под Haskell, что будет более сложно, посмотрите на <a>Yesod Web Framework</a>. Кстати, у него есть хорошее бесплатное руководство -<a>Yesod Web Framework Book</a>.</p>
120 <p>Если вы хотите писать фронтенд на Elm, а бэкенд на Haskell, вы наверняка захотите выбрать REST-like-клиент для бэкенда. Для простых приложений и для новичков в Haskell хорошим выбором будет<a>scotty</a>. Если же выходите работать исключительно с фреймворками под Haskell, что будет более сложно, посмотрите на <a>Yesod Web Framework</a>. Кстати, у него есть хорошее бесплатное руководство -<a>Yesod Web Framework Book</a>.</p>
121 <p>Пользователь<a>5outh</a>, Reddit</p>
121 <p>Пользователь<a>5outh</a>, Reddit</p>
122 <p>Выдержка из <a>официальной документации</a>Kotlin:</p>
122 <p>Выдержка из <a>официальной документации</a>Kotlin:</p>
123 <ul><li><a>Spring</a>использует возможности Kotlin, чтобы предлагать<a>более лаконичные API</a>, начиная с версии 5.0.<a>Онлайн-генератор проектов</a>позволяет быстро сгенерировать новый проект в Kotlin.</li>
123 <ul><li><a>Spring</a>использует возможности Kotlin, чтобы предлагать<a>более лаконичные API</a>, начиная с версии 5.0.<a>Онлайн-генератор проектов</a>позволяет быстро сгенерировать новый проект в Kotlin.</li>
124 <li><a>Vert.x</a>, фреймворк для создания интерактивных веб-приложений на JVM, предлагает<a>специальную поддержку</a>Kotlin, включая<a>полную документацию</a>.</li>
124 <li><a>Vert.x</a>, фреймворк для создания интерактивных веб-приложений на JVM, предлагает<a>специальную поддержку</a>Kotlin, включая<a>полную документацию</a>.</li>
125 <li><a>Ktor</a> - это фреймворк от JetBrains для создания веб-приложений на Kotlin, использующий корутины для высокой масштабируемости и предлагающий простой в использовании идиоматический API.</li>
125 <li><a>Ktor</a> - это фреймворк от JetBrains для создания веб-приложений на Kotlin, использующий корутины для высокой масштабируемости и предлагающий простой в использовании идиоматический API.</li>
126 <li><a>kotlinx.html</a> - это DSL, который можно использовать для HTML-разметки в веб-приложениях. Он служит альтернативой традиционным системам шаблонов, таким как JSP и FreeMarker.</li>
126 <li><a>kotlinx.html</a> - это DSL, который можно использовать для HTML-разметки в веб-приложениях. Он служит альтернативой традиционным системам шаблонов, таким как JSP и FreeMarker.</li>
127 <li><a>Micronaut</a> - это современный фулстек-фреймворк на базе JVM, который позволяет создавать модульные, легко тестируемые микросервисы и бессерверные приложения. В него встроены множество полезных функций.</li>
127 <li><a>Micronaut</a> - это современный фулстек-фреймворк на базе JVM, который позволяет создавать модульные, легко тестируемые микросервисы и бессерверные приложения. В него встроены множество полезных функций.</li>
128 <li><a>http4k</a> - это функциональный инструментарий с небольшими возможностями для HTTP-приложений, написанный на чистом Kotlin. Библиотека основана на статье "Your Server as a Function" из Twitter и представляет моделирование как HTTP-серверов, так и клиентов в виде простых функций Kotlin, которые могут быть собраны вместе.</li>
128 <li><a>http4k</a> - это функциональный инструментарий с небольшими возможностями для HTTP-приложений, написанный на чистом Kotlin. Библиотека основана на статье "Your Server as a Function" из Twitter и представляет моделирование как HTTP-серверов, так и клиентов в виде простых функций Kotlin, которые могут быть собраны вместе.</li>
129 <li><a>Javalin</a> - это очень лёгкий веб-фреймворк для Kotlin и Java, который поддерживает WebSocket, HTTP/2 и асинхронные запросы.</li>
129 <li><a>Javalin</a> - это очень лёгкий веб-фреймворк для Kotlin и Java, который поддерживает WebSocket, HTTP/2 и асинхронные запросы.</li>
130 <li>Доступные варианты стабильности включают в себя прямой доступ к JDBC, JPA и использование баз данных NoSQL через их Java-драйверы. Для JPA<a>плагин компилятора kotlin-jpa</a>адаптирует классы, скомпилированные на Kotlin, к требованиям фреймворка.</li>
130 <li>Доступные варианты стабильности включают в себя прямой доступ к JDBC, JPA и использование баз данных NoSQL через их Java-драйверы. Для JPA<a>плагин компилятора kotlin-jpa</a>адаптирует классы, скомпилированные на Kotlin, к требованиям фреймворка.</li>
131 </ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
131 </ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>