Ответы пользователя по тегу Веб-разработка
  • Какой инструмент-конструктор выбрать для разработки UI для REST API?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Может быть vaadin подойдет вам?
    Thymeleaf не подойдет, ибо это шаблонизатор для разработки MVC приложений.
    Если postman & swagger не подходят и вы не хотите писать отдельный фронт на reactç angular etc., то стоит посмотреть в сторону Vaadin
    Ответ написан
  • Какой хостинг лучше использовать для spring приложения?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Добрый день.
    Если приложение действительно простое, то подойдет любой VPS / VDS.
    Однако, замечу, что было бы неплохо провести профилирование и глянуть на объем потребляемой оперативной памяти и т.д.
    Также при выборе хостинга стоит учесть тот факт, что могут быть проблемы с оплатой услуг зарубежных провайдеров. А так я бы посоветовал Hetzner (немецкий) из разряда дешево-сердито.
    Ответ написан
    Комментировать
  • Оправдано ли использование TypeScript для больших проектов?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Именно в больших проектах его применение более чем оправдано.
    Ответ написан
    1 комментарий
  • Как дозаполнить корректно поля для Entity при конвертации из DTO?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Думаю, что вопрос сформулирован некорректно или возможно, я его недопонял.

    Итак, насколько я вас понял, то вы хотите обновить существующую запись на основе данных, которые прибежали из контроллера в виде DTO.

    Во-первых, в данном случае стоит использовать PutMapping (full updates) или PatchMapping (partial updates)
    Читаем подробно тут:
    https://www.baeldung.com/http-put-patch-difference...

    Во-вторых, после того, как вы получили DTO вам необходимо его замаппить в Entity и обновить в БД. Однако, могут быть поля, которые не были заполнены в DTO и вы не хотите, чтобы они были применены, как null, так?

    Далее конвертирую в entity, но откуда мне взять значения тех полей, которых не было в запросе?

    Вам не нужно дозаполнять поля сконвертированного entity. Вам необходимо:
    1) найти этот entity по идентификатору.
    2) Если не хотите, чтобы null поля были применены к сущности, то при маппинге (см. ниже) сделать null check и если поле DTO null, то не сеттить его к сущности.
    3) сохранить сущность.

    Что касается маппинга:
    1) Вы можете использовать интерфейс Converter<S, T>. И для каждого из полей сделать проверку типа (псевдокод):
    if (fieldValue != null) { entity.setField(fieldValue); }

    2) Если вы используете какую-либо библиотеку для маппинга (modelMapper, MapStruct и др.), то используйте возможности либы. Например, для modelMapper:
    modelMapper.getConfiguration().setPropertyCondition(Conditions.isNotNull());

    https://stackoverflow.com/questions/45451025/how-t...

    Также прокомментирую ваши комментарии из другого ответа:
    вот мне интересно, как решается этот вопрос. Разве это нормально, что на каждый пришедший запрос к сервису приходится ходить к базе данных? И это без учета логики!

    Можно настроить кеширование и тогда, обращения к БД не будет.


    Это базовая ситуация, с которой сталкивается каждый. Допустим у меня entity Person с атрибутом даты рождения, которую я не хочу отображать в PersonDto. Когда пользователь пришлем мне PersonDto по API для, допустим, операции обновления, то как мне при конвертации в entity вернуть эту дату рождения, чтобы я мог сохранить новую сущность?

    Обратите внимание на то, что может быть несколько DTO.
    Например,
    PersonCreationRequest - dto, которое заполняется из фронта при создании юзера
    PersonCreationResponse - dto, которое заполняется из бекенда после создания юзера
    PersonUpdatingRequest - dto, которое заполняется из фронта при обновлении юзера
    PersonUpdatingResponse - dto, которое заполняется из бекенда после обновления юзера
    PersonDto - общее dto, которое заполняется из бекенда для других нужд.
    Могут быть и другие DTO...
    Соответственно, ответ на ваш вопрос - используйте разные DTO.

    Не знаю насколько точно смог ответить на ваш вопрос.
    Ответ написан
    1 комментарий
  • Данные о другом пользователе через instagram api?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    То есть не существует никакого официального способа получить ленту другого пользователя?

    Подозреваю, что да. И как вам уже подсказали вам необходимо спарсить ленту. Например, при помощи selenium. Или же как вариант изучить внутренний АПИ, выполнить запрос и спарсить json, в котором будут необходимые данные.
    Ответ написан
    Комментировать
  • Написать программу редактирующую страницу в wordpress?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Мне приходилось писать подобные приложения.
    Вам необходимо работать с Wordpress REST API.
    Есть Java клиент.
    Используйте эту либу:
    https://github.com/Afrozaar/wp-api-v2-client-java
    Также на ВП сайт установите этот плагин, чтобы можно было авторизовать сторонний клиент
    https://github.com/WP-API/Basic-Auth
    Если вам нужно редактировать метаданные на сайте ВП, то установите этот плагин на сайт
    https://github.com/Afrozaar/wp-api-v2-client-java-...
    Можете также глянуть на:
    https://github.com/Afrozaar/wp-api-v2-afrozaar-extras

    При необходимости вы можете использовать другой фреймворк:
    Apache Camel + Apache Camel WP Component
    https://camel.apache.org/
    https://camel.apache.org/components/3.4.x/wordpres...
    Ответ написан
    Комментировать
  • Как читать книги из браузера?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день!
    Ну во-первых,
    вам нужно найти библиотеку или библиотеки на java или на другом языке, которая умеет конвертировать форматы книг в html. Скажу честно, тут могут понадобится различные инструменты, вплоть до OCR.
    Например, для pdf - https://www.e-iceblue.com/Tutorials/Java/Spire.PDF...
    Ищите различные либы для pdf, doc, docx, txt, fb2 и т.д. Гуглим

    Далее предположим, что есть некая регистрация на сайте и у каждого пользователя есть прогресс чтения книг. Дальше тут много аспектов, о которых вам нужно подумать. Например, сохранение прогресса сперва на клиентской стороне в localStorage, затем сохранение информации на серверной стороне.
    Ответ написан
  • Можно ли создать сайт одному на java?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день!

    Можно ли создать сайт одному?

    Да, это называется fullstack. Мы проходите полный цикл разработки сайтв - frontend + backend.
    Отсюда вопрос - хотите ли вы написать полноценный фронт с применением js-фреймворка (vue, react и др.) или вы хотите написать MVC приложение с каким-нибудь шаблонизатором (thymeleaf, mustache, freemarker и др.).
    Конечно же знание JavaScript понадобится в обеих вариантах. В первом случае нужно владеть js более профессионально. Разбираться в таких вещах, как nodejs, npm, js-framework, возможно даже ts.

    Я хочу узнать могу ли я на java создать хотя бы часть сайта самостоятельно

    Backend (REST) вы можете написать на java. Frontend не получится. Если хотите фронт тоже на java писать, то можете глянуть на Vaadin. Хотя как по мне лучше изучить js || ts + vue || react.

    делать сайты как telegram, amazon или AliExpress можно только в больших командах

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

    Может быть мне стоит изучить php или python и попытаться создать сайты с их помощью?

    Ну вам решать на чем писать backend. Если нужно что-то попроще, то я бы рекомендовал изучить python (Django или Flask). Он подходит для разработки ERP, также как и ruby (RoR), php (Yii2, Laravel, Symfony), ну и Java (Spring).

    Важно еще задуматься о разработке UX / UI дизайна и верстке макета. Вряд ли вы сами будете это делать. Ну или же можно приобрести готовые шаблоны на themeforest или на creative-tim и т.д.
    Ответ написан
    3 комментария
  • Можно ли написать бэкенд на Java а фронтенд на Swift для Apple?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Backend можно написать на чем угодно. Java тоже подойдет.

    Будет ли это работать на Apple ?

    Даже не сомневайтесь. Вообще все равно что крутится на фронте, будь то приложение на swift или react native или js фреймворк для веб-приложения и т.д.
    Ответ написан
    Комментировать
  • Как реализовать сайт наподобие google form?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день!
    1) есть сервер на ubuntu; 2) на него установил lamp

    Можно более простым способом обойтись и установить VestaCP
    https://vestacp.com/
    Но если нравится все ставить руками, то lamp в самый раз.
    Что касается выбора CMS, CMF или фреймворка, то тут зависит от вашего бюджета или навыков.
    С учетом того, что в ТЗ не было озвучено ничего специфичного, то CMS WordPress подойдет.
    Если будете делать на ВП, то вот, примерная инструкция:
    - установить плагин Advanced Custom Fields. Желательно, даже Pro
    - Создать кастомные поля (форму) куда пользователи смогут заносить свои данные
    Читаем как создать front-end форму
    - Создайте кастомный тип записи Читаем про register_post_type
    - А далее при сабмите формы из фронта создаете новый кастомный пост. Можно не публиковать пост сразу, а создавать его со статусом draft и отправлять админу уведомление о наличии нового поста (анкеты). Далее админ проверяет и публикует.
    - Ну а дальше остается это все лишь красиво вывести на сайте.
    Ну а если хотите написать с нуля, то можно и на фреймворках, типа Yii2, Laravel и др.

    Скажу честно, сама идея меня несколько напрягает. Смысл людям вбивать свои личные данные (ФИО, где и когда родился, инн, снилс, и копии каких либо документов), чтобы они были доступны другим людям? К тому же, вам надо обеспечивать безопасность этих данных иначе взломать ВП и украсть данные не такая уж и сложная задача. Особенно, когда устанавливают кучу обнуленных плагинов и т.д. Ну и чтобы не было проблем с юридической точки зрения, то надо бы тогда создать страницу "Политика конфиденцильности" и подробно написать, какие данные вы собираете у пользователей, как их храните, используете и есть ли доступ у третьих лиц к этим данным.

    Я бы подобное сделал бы на фреймворках, чтобы иметь возможность контролировать хранимые данные. Возможно, что данные в БД хранить в зашифрованном виде и дешифровать их при обращении к БД. Дополнительная мера безопасности так сказать...
    Ответ написан
    2 комментария
  • Веб-приложение на Java без знаний фронтенда?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Прекрасно понимаю вас, так как сам когда-то был в подобной ситуации.
    Создавать более или менее нормальные сайты не зная основ - невозможно!
    Если брать по минималке, то разберитесь в:
    - html 5 (посмотрите на блочную верстку и на флексбоксы (flexbox), обратите внимание на тег form )
    - css3 изучите основы css. Изучите бутстрап (bootstrap 3 или 4)
    - изучите javascript & jQuery. Желательно сразу изучить синтаксис ES6
    - изучите основы TCP / IP
    Знаний из этого источника должно быть предостаточно - https://www.w3schools.com/
    Пройдите learn html, learn css и пожалуй, learn bootstrap. JavaScript и jQuery

    Этого должно быть предостаточно, чтобы писать MVC сайты. А если преуспеете в этом деле, то можете потом переходить на js фреймворки (для новичков подойдет VueJS) + RESTful backend.
    Ответ написан
    2 комментария
  • Каким образом лучше создать администратора в Spring Boot проекте?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Приветствую, коллега!
    Да, Spring посложнее, чем Django. Но раз тебе удобно писать именно на нем, то конечно же стоит писать backend на нем.
    И да, если уж делать проект по-хорошему, то тебе нужен Spring Security. Тебе нужно создать роль ADMIN.
    Так как проект простой, то можешь использовать In-Memory Auth.
    Так как ты пишешь REST, то скорее всего тебе нужно будет реализовать jwt auth.
    Чтобы по умолчанию при старте приложения создать пользователя, можешь имплементировать интерфейс CommandLineRunner и в методе run() создать юзеров и сохранить в БД.

    P.S. БД необязательно.
    Ответ написан
    Комментировать
  • На каком языке CMS сайта будет работать быстрее?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Прежде всего стоит различать такие термины, как CMS, CMF и фреймворки.
    Раз к вашему вопросу добавлен тег Java, то скажу следующее - как правило, на Java CMS не пишут. Можно конечно же написать, но так как такие языки, как Java и C# ориентированы на Enterprise, то обычно на них пишут веб-приложения с использованием различных фреймворков под конкретную задачу. К тому же, если сравнить готовые CMS написанные на Java (например, HippoCMS) и на РНР (например, WordPress), то вы заметите, что деплоить приложения написанные на Java сложнее, чем на РНР. Опять же знаменитая 5-ти минутная установка WP на сервер намного легче. + важный момент заключается в том, что CMS системы написанные на РНР можно развернуть на любых shared хостингам, в то время, как для Java развертывания приложений вам нужно подготовить сервер (VPS или VDS), установить Tomcat или любой другой сервлет-контейнер. Или же деплоить приложение в облако - AWS, Heroku и др. Как минимум, это требует доп. знаний и опыта или же привлечения доп. специалиста - DevOPS.
    Соответственно, не лучшая идея писать CMS на компилируемых языках. Java, C#, Kotlin, Scala и т.д.
    Также многое зависит непосредственно от разработчика. Если вы лучше владеете ЯП - python, то конечно же вам будет легче и лучше писать на нем, нежели на Java.
    Также стоит учесть, что CMS подразумевает некую универсальность применения и соответственно, на CMS может быть много лишнего кода (функционала), который вам и не нужен, но при этом потребляет ресурсы сервера. Или например, CMS может быть подточен на реализацию определенной цели. Например, на блог (как в случае с ВП), но при этом владельцу сайта может понадобится и интернет-магазин или еще что-нибудь. Довольно часто, из-за подобной универсальности приходится жертвовать архитектурой приложения, что непосредственно сказывается на быстродействии. Для наглядности - WP. Там в одной таблице wp_posts могут храниться различные данные (от записей и страниц, вплоть до товаров и объявлений и сообщений форума), хотя по факту каждый из них является отдельной сущностью.
    Также при разработке CMS систем предпочтение я бы отдавал интерпретируемым языкам и также учел бы их распространенность на хостингах. Тут опять-таки преимущество имеет РНР.
    Ответ написан
    Комментировать
  • Парсинг (скрапинг) получение информации с сайтов, авторизация, инструменты, примеры?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Здравствуйте!
    Начнем с простого, когда контент сайта загружается без фреймворков. Соответственно, нет никаких аяксов, не нужно никуда скроллить, чтобы получить следующую страницу или кликать на кнопки и т.д. для получения материалов. Т.е. вам достаточно отправить GET запрос на некий сайт и получить данные.
    В этом случае для парсинга будет достаточно библиотеки jsoup. Либо для своей кастомной реализации используйте DOM & SAX Parser.

    Теперь, чуть усложним задачу сайт точно также формируется без фреймворков, но для получения доступа к информации нужна авторизация. Если тут используется какая-то простая авторизация, то достаточно будет единожды получить кукисы и при каждом запросе указывать на сервер. Также не забывайте про referrer & User-agent.

    Теперь, еще усложним задачу - контент формируется динамически (посредством js-фреймворков или аякс запроса и т.д.). В этом случае jsoup не поможет, так как для загрузки контента вам нужно прокликать на кнопку (Загрузить еще) или проскроллить вниз, чтобы тригернуть загрузку контента и т.д. Т.е. вам нужна некая интерактивность. Для этого стоит посмотреть в сторону Selenium + (любой браузер). В качестве браузера можно использовать - firefox, chromium и др. Для быстродействия желательно использовать headless браузеры.

    Усложняем задачу дальше. Понадобилось авторизоваться и решить некую капчу. В часности рекапчу. Тут скажу заранее, что я сам когда-то давно искал возможные пути обхода и самое простое решение - использовать платный сервис.
    Ссылка на сайт - https://anti-captcha.com/
    После ввода имени пользователя и пароля селениум триггерит клик на капче, а дальше данные пересылаем на сервер и получаем решение капчи.

    Усложним задачу еще больше - различные honeypot. Тут как говорится кто на что горазд. Все зависит от конкретного сайта и конкретной реализации (софта) honeypot. Некоторые могут заблокировать по ip, если запрос был произведен на несуществующий урл. Например, на сайте всего 100 страниц, а вы запросили 101 страницу и попались в ловушку. Или например, вы заполнили невидимое input поле, которое в норме пользователь не видит и соответственно, не заполняет.

    Идем дальше - если вам нужна некая интерактивность (т.е. пользователь сайта должен иметь возможность самостоятельно парсить сайт), то вам нужна клиентская часть написанная на javascript. Подобные онлайн-сервисы имеются. Наберите в гугл web scraping online и увидите различные сервисы. Как правило, они предлагают установить некое расширение, при клике на котором он получает доступ к элементам DOM, а далее уже можно при помощи селекторов (id, xpath, class ) определить что нужно спарсить. Определить тип навигации / пагинации (например, пагинация при помощи нумерации страниц или пагинация при помощи кнопки Далее и др.). Тут могут свои подводные камни. Например, некоторые сайты при достижении максимальной страницы могут выдавать ошибку (404), некоторые не выдают ошибку и лишь показывают контент заново. Иногда нужно проверять страницу на наличие пустоты на странице (на отсутствие элементов по селектору). Иногда нужно проверять страницу на наличие ошибки 404 и т.д. В общем, это уже работа фронтэндера.

    Некоторые динамически формируемые страницы могут подгружать контент при помощи json или xml. Соответственно, для парсинга некоторых сайтов можно обойтись без использования selenium. А лишь запросить материалы по их внутреннему API, а затем при помощи gson или jackson спарсить их.

    Одним из универсальных инструментов парсинга, с которым мне приходилось сталкиваться была программа Visual Web Ripper. Стоит примерно 250-300 долларов. Программа подгружает контент сайта внутри себя через IE (может уже и обновили этот момент). А далее уже можно задавать условия парсинга и экспортировать данные.
    Ответ написан
    Комментировать
  • Нужен совет, как оживить дроп сайт?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Довольно долго занимался этим вопросом и пришел к следующим выводам:
    - иногда лучше не восстанавливать сайт, а лишь парсить нужные данные и создавать новый сайт на базе ВП. В любом случае в скачанном вами архиве лежит статика и круто, если она вообще полностью рабочая.
    - для скачивания использую консольное приложение wayback machine downloader написанный на Ruby. Его можно найти на github
    - После скачивания в зависимости от пожеланий заказчика либо пишу парсер (я например, пишу на java - jsoup) и собираю данные, импортирую их на ВП (либо через REST API или xlsx - плагин WP All Import) и переношу на новый дизайн (на ВП тему), либо создаю тему на основе той статики, которая имеется.
    - Иногда бывает лучше при парсинге не сохранять старые урлы, а настраивать корректные редиректы со старых на новые.
    Ответ написан
    Комментировать
  • Как называется эта ветвь в программирование?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Веб-разработка. Просто в вебе тоже есть разные направления... frontend backend etc.
    Ответ написан
    Комментировать
  • Где лучше хранить изображения?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Без разницы, где вы будете хранить медиафайлы. На проф. проектах они могут храниться на облачном хранилище (например, AWS).
    Если у вас shared хостинг, то обычно есть ограничения на inodes. В среднем 200 - 250 000. А значит, хостинг будет ограничен этим кол-вом файлов.
    Можно еще хранить на Google Drive (Use your drive), Dropbox (Use your Box) & Yandex Disk и т.д.
    Ответ написан
    Комментировать
  • Какая есть альтернатива vueJS для spring Boot?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Думаю, что вам стоит серьезно изучить о том. что такое фронтэнд и какие языки имеются для фронта. Если коротко, то html / css / js.
    Используемый фреймворк фронта не имеет никакого отношения к бекенду. Вы можете использовать React, Angular, VueJs и др. Ведь, по факту на беке это просто restful сервис, который отдает контент и взаимодействует с фронтом.
    Есть ли инструменты для фронтенда у python или быть может на ruby ?

    эти языки предназначены для бекенда. Соответственно, инструментов для фронта у них нет. Но и с фреймворками написанными на вышеуказанных языках (Django, RoR etc.) можно использовать абсолютно те же самые фреймворки, которые я указал выше.
    Ответ написан
    Комментировать
  • "Скрипт" для загрузки файлов на сайт с помощью Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Как сделать так чтобы скрипт использовал мой браузер или был залогинен на нужном сайте.

    Selenium + любой браузер (chromium, firefox) + drive для этого браузера.
    Запускаете браузера в headless режиме и производите все что нужно (загрузить файлы и т.д.).
    Если нужно регулярно выполнять задачу, то добавьте системный процесс.
    Но на мой взгляд в вашем случае скриптовым язык будет лучше реализовать подобное. А-ля js, python.
    Ответ написан
    2 комментария
  • Как создать такое такую кнопку на каждой странице?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Вот, важные моменты:
    Создаете обычный div или button или a
    Добавляете ему в CSS свойство position:fixed или position:absolute; right: 0;
    По клику на кнопке средствами js отображаете другой div блок, который виден у вас на скрине справа внизу. Этому блоку например, назначаете position:absolute; right:0; bottom:0;
    Для отображения или скрытия блока используйте jQuery show() & hide() или toggle()
    Ответ написан
    Комментировать