LINUX.ORG.RU

Какие есть реальные преимущества написания Rest API на Java?

 ,


1

1

Всем привет! Напишите по своему опыту, какие есть реальные преимущества и недостатки создания Rest API на Spring + Hibernate? Интересует в сравнении с Go/NodeJS/Python/Php. Например, в каких случаях API лучше пилить именно на Java?

Ответ на: комментарий от crutch_master

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

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

Питонисты пишут на джанге дефакто

Икспертиза от анонимусов в этом треде прям зашкаливает.

Сейчас не начало 2010-х, не пишут уже новые проекты на джанге. И слава богам.

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

Ясно, ты не только с программированием не связан никак, ты вообще от реальности оторван. 99% начинаемых сегодня питоновских веб-проектов используют джангу. Я это говорю при том, что вебом вообще никак не занимаюсь, тем более джангой, но ситуацию я знаю, разумеется, сильно получше тебя.

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

Дурачок, я в отличие от тебя профессиональный программист со стажем в 15 лет (хотя стаж это не аргумент и не показатель, конечно). А ты вообще я не понимаю кто.

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

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

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

я в отличие от тебя профессиональный программист со стажем в 15 лет

Так даже хуже. Будь ты поломойкой, твой бред был бы простителен. А ты 15 херачишь, но всё ещё бестолковая обезьяна, ну позор же, нет?

но открываешь рот и закономерно садишься в лужу

Ещё бы ты мог меня на чём-то подловить. Но ты же всё лепечешь что-то из разряда «тыты дурак, кококо. А я-то знаю!».

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

Самое забавное – это то, что я сталкивался с практически идентичной ситуацией.

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

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

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

При этом он не решает вообще никакой проблемы Java и ничего не добавляет.

Добавляет и решает. Как минимум решает частично проблему обкатки новых функций, многие функции из Котлина в том или ином виде добавляются в java, можно посмотреть доклад https://www.youtube.com/watch?v=te3OU9fxC8U, там про это рассказывают.

Вторая проблема, которую решает kotlin, и которую никак не могут решить в java - это NPE, в kotlin-е в принципе отсутствует эта ошибка, она может возникнуть только на границе interop-а с java. Да, в java можно обмазаться анализаторами и чекерами, но во-первых таких единицы, а во-вторых это не убережёт от того, что в глубине какой-либо библиотеки вылезет NPE.

ma1uta ★★★
()

Писал (и пишу, ынтерпрайз) API (и не только) на Java. Писал API и на python (не ынтерпрайз: Tornado Web, ну и этот, самый распространенный - забыл название). Ну… Мне статическая типизация и С-подобный синтаксис джавы мне более по душе.

Преимущества именно Java Spring+Hibernate для меня… Ну, видимо, типизация, документация (ее много), коммьюнити, скорость реализации, легкость тестирования, классический ООП, удобство отладки (очень немаловажно!). В остальном нужно сравнивать advantages+disadvantages самих фрейворков, т.к. они разные фичи. Может быть, еще что-то всплывет позже.

Может быть, ты не этого хотел услышать. :)

ЗЫ. На пыхе тоже писал, но без всяких фреймворков и ОРМ-ов. Голый пых, голый коннект к БД. Все остальное было самописное. Даже шаблонизатор страниц.

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

Что за бред ты несешь? Какая обкатка? Oracle в состоянии сам обкатывать новые фичи. Котлин тут ни при чем.

Ты бы лучше посмотрел видео выступления Brian Goetz из Oracle, где он объясняет про статус preview новых элементов языка Java, дурачок. Там же объясняются почему долго не делали некоторые вещи.

функции из Котлина в том или ином виде добавляются в java

Какие функции конкретно? Я не хочу смотреть это говно по твоей ссылке.

«Из котлина в джаву» ничего не добавляют. О существовании котлина там конечно знают. Джаве 20 лет, там многое не добавляли не потому, что не знали, что так можно, и вот теперь увидели в котлине и скопировали. Это надо быть дебилом чтоб так думать.

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

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

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

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

Вторая проблема, которую решает kotlin, и которую никак не могут решить в java - это NPE

Рукалицо

ya-betmen ★★★★★
()
Ответ на: комментарий от anonymous

Знаю. Я ту же мысль пытался донести до ТС.

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

Уровень пхп-икспертов в этом треде зашкаливает.

На жабке всё хорошо, пока либы покрывают твои хотелки. Шаг влево и начинаются блудные танцы.

Бред и менструации пхпшника.

Ява сейчас в том состоянии, когда пишут на спринг+гибернейт, а не на яве.

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

куча фуллстак-макак, следовательно, куча говнокода, большая конкуренция на рынке труда и работодатель уже не горит желанием платить какие-то деньги

Описание будней пхпшника.

Память жабка жрёт так же, как и всегда, стектрейсы всё длиннее, чуть что набирать надо как машинистка или делать закшварную кодогенерацию.

На виртуалке со средненькой такой бухсофтиной на spring с tomcat и mysql 4 гига. Никогда не используется более 3х и практически вся в кеше. Но ты пиши еще. В стактрейсе интересен всего один линк на багу прямо в коде, что там тебе в них мешает мне очень интересно. Что такое кодогенерация в java мире вообще не понятно.

Сообщество всё больше походит на секту

Опять пхп мирок.

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

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

Ограничение - это а про парадигму самой явы. А что касается типов, с key[value] можно сделать много чего и в яве тоже, но там всё это не так просто. Тем ни менее, когда начинаешь делать рефлексию на яве ошибки начинают вываливаться в тот же рантайм и начинается та же самая пляска с тестами и стат.типизация уже не играет какой-то особой роли. Тут еще мода на var с auto и из приемуществ остаётся только ограничение совсем уже тупо не отстрелить себе конечности + какая-то производительность, которая правда потом убьётся о пляски с рефлексией.

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

Ты - Царь от мира явы?

Опять пхп мирок.

Так ява это и есть пхп. Тенденции такие.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Ограничение - это про парадигму самой явы.

Не сказал бы, учитывая рефлексию и аннотации, с помощью них можно реализовать например свойста, расширения (c#), и реализовывают https://projectlombok.org/.

Тут еще мода на var с auto

java var && auto != javascript var

какая-то производительность, которая правда потом убьётся о пляски с рефлексией

Не так уж она сильно и убивается.

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

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

Стактрейс - говнина. Его вообще быть не должно и никто его не должен выкидывать. На этом моменте я потерял смысл секаса с явой, т.к. она не даёт никакого гешефта. Она типа строгая, но на деле это защита от совсем уже дурака.

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

Его вообще быть не должно и никто его не должен выкидывать

А че, баги должны сами фикситься? Или предпочитаешь сежмент фаллаут?

Она типа строгая, но на деле это защита от совсем уже дурака.

Зато есть возможность прогнать код статическим анализатором, сделать для язычка нормальную IDE, запилить перегрузку функций, и многое другое.

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

Не сказал бы, учитывая рефлексию и аннотации, с помощью них можно реализовать например свойста, расширения

Лобмок делает это через такие костыли, что лучше про них не знать.

java var && auto != javascript var

Это понятно, с типом видно, что за тип переменной. var и auto всё увозят под ковёр, весь код становится сплошным auto. ide скоро начнут весь проект вывозить в рантайм, частично запускать и так работать.

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

Лобмок делает это через такие костыли, что лучше про них не знать.

Ну так инструменты для расширяемости не предназначены для конкретных задач, вот и выходит не очень красиво. Но они есть.

Это понятно, с типом видно, что за тип переменной.

Тип остается виден для компилятора, инструментов итд. Для тебя он тоже должен быть виден если ты не пишешь код в ed.

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

А че, баги должны сами фикситься? Или предпочитаешь сежмент фаллаут?

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

Зато есть возможность прогнать код статическим анализатором

Что бы что?

сделать для язычка нормальную IDE

Самое удобное ide - это repl и херачить код прямо в работающий проект. По скорости разработки и возможности дебага ничего лучше придумать нельзя.

запилить перегрузку функций

Не то, чтобы фича, скорее необходимость.

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

Ну так инструменты для расширяемости не предназначены для конкретных задач, вот и выходит не очень красиво.

Дело в том, что на js то, что делает лобмок делается одним циклом вообще без плясок. Соответственно так же делается что угодно, что в лобмок никогда не засунут.

Тип остается виден для компилятора, инструментов итд

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

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

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

А разве она считается строгим языком? Во всяком случае @NotNull!

Что бы что?

Найти ошибки например.

Самое удобное ide - это repl и херачить код прямо в работающий проект.

Хз, мне подобный подход нипонятен.

Не то, чтобы фича, скорее необходимость.

Для каждой такой функции можно написать собственное описание например.

stasolog
()
Ответ на: комментарий от crutch_master

Дело в том, что на js то, что делает лобмок делается одним циклом вообще без плясок.

Как там будет реализован @NotNull? Не видел. Ну и тут главное не забывать что lombok IDE способна понять.

Ну так дойдёт то того, что инструменты начнут жрать ресурсов больше, чем работающий проект.

Не дойдет, var вообще никак этому не способствует.

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

А разве она считается строгим языком? Во всяком случае @NotNull!

Так я про это и говорю.

Найти ошибки например.

Какие?

Хз, мне подобный подход нипонятен.

А дебаггер понятен?

Для каждой такой функции можно написать собственное описание например.

В каких случаях делают перегрузку? Когда надо засунуть что-то любого типа и их тупо все перечисляют и кастят под ковром? Т.е. это костыль, который с динамической типизацией не нужен. Второй вариант - нет нужных агрументов и они так же под ковром достаются/кастятся.

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

Какие?

Разные.

А дебаггер понятен?

Да.

В каких случаях делают перегрузку? Когда надо ...

А если одно действие ака функция должна работать с несколькими видами объектов, и делать она будет немного разные вещи? В таких случаях отдельная инфа и хороша.

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

Как там будет реализован @NotNull?

Стат.фичи на динамике никак не реализуются, да и настолько ли они нужны?

Ну и тут главное не забывать что lombok IDE способна понять.

Способна. С loombok - костылём. Какой-нибудь класс в js можно также взять и исполнить, а потом подставлять что получилось хоть до посинения.

Не дойдет

Так уже дошло.

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

Да.

Ну так это - дебаггер + возможность сразу кодить и тестить без перезапуска.

А если одно действие ака функция должна работать с несколькими видами объектов, и делать она будет немного разные вещи?

Ну тогда, логично, что функции должны быть разные, а то так можно дойти до программы из одной функции.

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

Стат.фичи на динамике никак не реализуются

@NotNull реализован в lombok, а не «в языке благодаря статике».

да и настолько ли они нужны?

Ну тут дело не в самом @NotNull...

Способна. С lombok - костылём. Какой-нибудь класс в js можно также взять и исполнить, а потом подставлять что получилось хоть до посинения.

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

Так уже дошло.

Ну var нивчем не виноват, IDE и так типы выводит, а var или int какая разница?

stasolog
()
Ответ на: комментарий от crutch_master

Ну так это - дебаггер + возможность сразу кодить и тестить без перезапуска.

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

Ну тогда, логично, что функции должны быть разные, а то так можно дойти до программы из одной функции.

Обычно они и разные.

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

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

Дело в том, что люди пишут на яве, программируя на чём угодно. Понятно, что с динамикой так не прокатит на 100%, потому что её надо исполнять и проще пилить под repl, получая всякие автодополнения с наборами методов прямо из вм.

Ну var нивчем не виноват

Его надо вычислять, а там внутри будет var через var и 50 вызовов. Просто проблема пока не стоит настолько остро.

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

Может я конечно не так понимаю саму идею, но мне всегда казалось все это сомнительным.

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

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

Ну тут дело не в самом @NotNull...

А @NotNull тут дело не ограничивается. Это так - макушка. Любой нормальный код состоит из проверок чуть ли не полностью и стат. типизация тут никак не помогает. Максимум что можно, наделать обёрток, но, на той же жабке, это будет работать как говно. Есть, например double, который выражает площадь, но никому особо не холодно и не жарко от того, что программа проходит стат.анализ и собирается, когда в этот double кто-то засовывает телефон.
Или, нужно сложить два положительных int'а в яве.
Нужно во-первых, проверить на >=0, во-вторых, проверить, чтобы в сумме они не давали больше MAX_INT, выкинуть ошибку в случае чего, а потом только считать. В итоге получаем то, что основные ошибки - это рантайм, весь день кодим проверки вместо того, чтобы работать, а в итоге получается, что проверки сделали не все.

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

IDE и так тип вычисляет.

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

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

А @NotNull тут дело не ограничивается.

Я про то что @NotNull не было в языке как ограничителя, а lombok как библиотека его добавил, но возможно ли такое в js?...

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

Сложнее определять тип для IDE не станет.

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

Я про то что @NotNull не было в языке как ограничителя, а lombok как библиотека его добавил, но возможно ли такое в js?...

Ну, там есть typescript. По сути это тоже самое, что lombook, только более масштабно.

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

Typescript не библиотека, я короч к тому что Java расширяемый язычек, с возможностями.

Я могу так же на коленке сделать костылелибу с парсером/кодогенератором/стат.проверкой и сказать, что js тоже расширяемый язык.

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

Есть, например double, который выражает площадь

Что за дичь я услышал?

программа проходит стат.анализ и собирается, когда в этот double кто-то засовывает телефон.

Кто засовывает? Куда? В REST запрос? И никуда поезд не сдвинется потому что вагон и маленькая тележка фреймворков валидации. И будет стоять над телефоном @PhoneNumber или вроде того.

Нужно во-первых, проверить на >=0, во-вторых, проверить, чтобы в сумме они не давали больше MAX_INT,

Прямо-таки каждодневный пример. Ни разу не высосаный из пальца. Ведь давно всем известно что есть хоть мельчайшая вероятность больших чисел то все используют long.

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

Что за дичь я услышал?

Что за дичь ты написал?

Кто засовывает? Куда? В REST запрос?

Юзер в поле ввода. Как всё это долетает - дело десятое.

И никуда поезд не сдвинется потому что вагон и маленькая тележка фреймворков валидации.

Так о том и речь, что от основных типов данных пользны не очень и много, и приходится делать костыли с аннотациями.

И будет стоять над телефоном @PhoneNumber или вроде того.

Мы говорим про площадь в которой номер телефона, а не про валидацию номера. Или ты предлагаешь проверять любые данные на всё, что только можно?

Прямо-таки каждодневный пример. Ни разу не высосаный из пальца. Ведь давно всем известно что есть хоть мельчайшая вероятность больших чисел то все используют long.

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

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

с типом видно, что за тип переменной. var и auto всё увозят под ковёр, весь код становится сплошным auto.

А зачем постоянно вычитывать типы? Они либо из контекста сразу ясны, либо среда разработки подскажет. Это же прекрасно, что современные статические ЯП все больше походят на динамические (т.е. человечные). Сложность вытесняется в компилятор, где ей и положена быть. Если кому-то страшно становится от неаннотированного кода, это к доктору.

bread
()
Ответ на: комментарий от crutch_master

Мы говорим про площадь в которой номер телефона, а не про валидацию номера. Или ты предлагаешь проверять любые данные на всё, что только можно?

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

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

Типа если в JS плюсовать Number аж после MAX_SAFE_INTEGER будет прям сильно по-другому. Ну хотя бы не в минусах, да.

spoilt ★★★
()
Последнее исправление: spoilt (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.