Задать вопрос
  • Как frontend и backend соединяют в единый проект?

    @rPman
    фронтэнд - это приложение (html+css+javascript) для веб-браузера, запускается у пользователя, оно должно быть создано таковым, что бы делать запросы к бакэнду

    бакэнд - это приложение (другое), запускаемое на сервере, которое обеспечивает функцианирование всей системы (но бывает оно не единственное). Обычно бакэнд состоит из готового веб сервера (например nginx/apache или майкрософтовский IIS , который выполняет большую часть рутинных операций, включая отдачу статичных файлов, те самые html, css, javascript, точнее те что не меняются в процессе работы приложения) и приложения/модуля (php или к примеру майкрософтовский asp.net), который отдает динамический контент - файлов, содержимое которых меняется в зависимости от запроса фронтэнда.

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

    Разделяют два подхода к реализации всего веб-приложения (обычно это не тригер а нестрогий выбор, типа 'немного первого подхода и в основном второго'):
    1. на каждое действие пользователя (клик по разным страницам сайта и элементам интерфейса типа меню) бакэнд заново формирует html (и по необходимости все остальное) а веб браузер это отображает.
    В этом подходе javascript не требуется, браузер практически не тратит ресурсы, но тратятся ресурсы сервера и нагружается сеть между ними.
    2. все что касается интерфейса реализуется на javascript в браузере, html формируется на javascript, но данные и операции, отсылаются на сервер к бакэнду в виде относительно небольших (по сравнению с html интерфейса) файлов-запросов (формат и структуру этих запросов часто приходится разрабатывать самостоятельно, но есть хелперы).
    Исторически сложилось, что данные от бакэнда удобнее передавать в текстовом виде в формате .json, а вот от фронтэнда к бакэнду исторически отправляют в виде multipart/form-data (то что отправляет на сервер html конструкция из тегов form, input, textarea и т.п.). Но это естественно не обязательные требование, и ничто не мешает и с клиента отправлять запросы в виде json, а так же вместо json использовать свой формат, например в браузер (и его javascript) встроено куча инструментов для отправки бинарных данных (например XMLHttpRequest).

    Очень много ограничений и требований накладывает выбор среды разработки, например при использовании visual studio asp.net, все будет завязано на майкрософтовскую инфраструктуру, начиная с деплоя и кончая собственно работы бакэнда.. Но как бонус, я отчетливо помню (при использовании WinForms) приложение для веб разрабатывалось точно так же как для десктопа, с очень небольшими отличиями, и при этом это работало в браузере (если честно отвратительно, но кто сейчас смотрит на качество реализации).

    p.s. есть еще старый но все еще рабочий способ, формирования страницы на клиенте с помощью xslt (это язык шаблонизатор для получения html), а сервер отправляет xml файл с данными. Можно упороться и реализовать все на таких шаблонах, что они не будут требовать javascript но работать все будет на стороне клиента с очень эффективной тратой ресурсов как сервера так и сети.
    Ответ написан
    Комментировать
  • Как frontend и backend соединяют в единый проект?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Как мне их правильно соединить?
    Во первых - зачем? Смысл разноса api и приложения в том что бэк работает одинаково со всеми запросами (не особо важно кто и как их дергает, лишь бы права позволяли), а фронт не зависит от бэка в представлении. По этому фронт пишется как морда на каком-нибудь реакте, который от бэкенда получает данные по запросу. Нужно авторизоваться - стучишся в эндпоинт авторизации, отдаешь креденшелы, получаешь токен. Нужно список юзеров - берешь доку по апи, стучишся с нужным пэлоадом на эндпоинт, получаешь жсон списка, из него рисуешь что хочешь...
    Во вторых -
    Или frontend и backend размещены разными программами?
    что-то мне подсказывает что наверное вы рановато по знаниям взялись за задачу...
    Ответ написан
    Комментировать
  • Почему nginx set кодирует значение?

    Driver86
    @Driver86 Автор вопроса
    Немодератор toster.ru
    Не баг, а фича.
    https://serverfault.com/questions/1036804/nginx-ma...
    Оператор try_files использует числовые захваты из регулярного выражения в location операторе. Проблема с числовыми захватами заключается в том, что они перезаписываются всякий раз, когда вычисляется регулярное выражение. map содержит регулярное выражение, которое вычисляется между операторами locationи try_files.
    Решение — использовать именованные захваты

    Не знаю, точно ли это мой случай, но с именованными захватами эта проблема действительно исчезла. Видимо, если в конфиге nginx больше одного регулярного выражения, стоит всё-таки избегать числовые захваты.
    Ответ написан
    Комментировать
  • Какую кодировку выбрать для немецкого языка?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Как обычно, три ответа - и ни одного по делу

    Кодировка таблиц в MySql должна быть utf8mb4.
    Ответ написан
    Комментировать
  • Какую кодировку выбрать для немецкого языка?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Для немецкого я всегда ставлю utf8mb4_unicode_ci
    Работает просто отлично.
    А кодировка utf8mb4.
    Но вы скорее всего будете выбирать тип сортировки, если через phpmyadmin.
    Если руками будете таблицы создавать, то надо прописать типо
    CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
    А когда будете создавать таблицу, то примерно так.
    CREATE TABLE example (
      id INT PRIMARY KEY,
      name VARCHAR(255)
    ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    Ответ написан
    2 комментария
  • Почему при вызове метода increment модели wasChanged принимает значение true у других аттрибутов?

    @mrFlyer Автор вопроса
    В общем в гитхабе сказали делать так:

    You need to use

    $book->increment('some_value', extra: ['full_name' => $book->full_name]);
    or
    $book->increment('some_value', extra: ['full_name' => Str::random()]);
    or
    $book->increment('some_value', extra: $book->getDirty());


    Т.е. указываем какие поля сохранять вместе с инкрементом ... так себе решение.
    Ответ написан
    Комментировать
  • Почему 404 это ошибка клиента?

    Steel_Balls
    @Steel_Balls
    5xx - это ошибка сервера (раньше работало, а тут вдруг приболел чаво-то). Что-то типа - зовите админов и будите программеров, пусть чинят!
    И это надо чинить!
    А теперь представь, что спам-бот начинает запрашивать несуществующие страницы.
    И что? Звать всю команду чинить это? Нет.
    Это уже проблемы юзера, что он запрашивает то, чего не может быть
    Пусть Федот проявит прыть, Пусть сумеет вам добыть. То-Чаво-На-белом-свете- Вообче-Не-может-быть

    P.S. А сам вопрос интересный, буду задавать на собеседованиях
    Ответ написан
    9 комментариев
  • В чем суть логической ошибки, продемонстрированной в старинном учебнике?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    ЕСЛИ треугольник прямоугольный ТО квадрат гипотенузы равен сумме квадратов катетов
    Отсюда не следует, что
    ЕСЛИ квадрат гипотенузы равен сумме квадратов катетов ТО треугольник прямоугольный
    Правильное обратное утверждение:
    ЕСЛИ квадрат гипотенузы НЕ равен сумме квадратов катетов ТО треугольник НЕ прямоугольный

    Простейший аналог:
    ЕСЛИ животное это собака ТО у неё четыре лапы ⇏ ЕСЛИ у животного четыре лапы, ТО это собака
    ЕСЛИ животное это собака ТО у неё четыре лапы ⇒ ЕСЛИ у животного НЕ четыре лапы, ТО это НЕ собака

    Студент должен был доказать, что квадрат гипотенузы равен сумме квадратов катетов только в прямоугольных треугольниках и обосновать утверждение
    ЕСЛИ треугольник прямоугольный ТОГДА И ТОЛЬКО ТОГДА квадрат гипотенузы равен сумме квадратов катетов
    Ответ написан
    2 комментария
  • Разбивка на страницы?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Чтобы ограничить количество выводимых страниц требуется знание арифметики в пределах начальной школы.
    Чтобы вместо 1 и $num_pages использовать заранее рассчитанные значения, укладывающиеся в определённый интервал. Например 10 страниц.
    То есть надо всего лишь определить начальную и конечную цифры, которые подставлять в for вместо 1 и $num_pages.
    Например, если мы хотим выводить только 10 страниц, а текущую выводить посередине то для получения первой цифры надо отнять от текущей 4. Затем к ней надо прибавить 9 - так мы получим второе число.
    При этом, разумеется, надо проверить, чтобы первое не было меньше 1, а последнее - больше $num_pages.
    А дальше просто подставить их в for. Вот и всё.
    Ответ написан
    3 комментария
  • Как найти опечатку в номере телефона?

    @knigaman
    Во-первых даже у одного человека могут быть номера, которые отличаются на одну-две цифры, такое может быть в реальности - это не всегда ошибка.

    Во-вторых подойдет любая функция сравнения строк, например в пыхе что первое гуглится функция similar_text. Тупо смотришь процент схожести и если он высок - порог определи сам - тупо выдавай предупреждение о возможной опечатке. Можешь наколхозить свой вариант - не возбраняется.
    Ответ написан
    Комментировать
  • Как настроить програмный Рейд 1+0, на линукс?

    @Drno
    Зачем проксмокс? там будут еще виртуалки?
    делайте обычный mdadm для данных
    на виртуалке какой смысл делать рейд? его надо делать на хранилище...
    raid 1+0 называется raid-10

    mailcow \ roundcube
    Ответ написан
    5 комментариев
  • Не могу разобраться с websocket. Что я делаю не так?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    На этот вопрос тут уже отвечали неоднократно. RTFM CORS.
    Если коротко, то для того, чтобы страница, открытая с вашего сервера, (localhost:5173), обратилась на страницу другого сервера (stream.binance.com:9443), этот другой сервер должен дать специальное разрешение в CORS-заголовках ответа. Если другой сервер не принадлежит вам, то единственным способом обхода является обращение через свой бэкенд, так как контроль CORS - встроенная функция браузера.
    Ответ написан
    2 комментария
  • Чем frontend разработчик занят на реальных проектах?

    С резким ростом популярности React Server Components и Next.js в последнее время происходит некий сдвиг в понимании, что такое фронтенд.
    BFF уже почти становится неотъемлемой частью "фронтенда", и становится обременительно разделять браузер и сервер на разные команды.
    На Западе, вообще, уже очень давно и макетами, и вёрсткой, и анимациями очень часто занимается один человек - дизайнер, фронтендеры занимаются связкой браузер + BFF, а бэкендеры занимаются более сложной бизнес-логикой.
    К тому же, джуниорам зачастую дают те задачи, которыми сами не хотят заниматься, и на что нет времени. Т.е. это что-то занудное, работа с legacy, передвижение кнопки на 5px влево и т.д. Крайне редко джуниорам дают интересные творческие задачи. Не факт, что вам на новом месте не дадут такие же неинтересные задачи.
    Вы можете либо молча сильно стараться в надежде, что вам потом дадут что-то интересное, заметив ваше рвение, либо, лучше всего, пообщаться по-человечески с коллегами и начальством, объяснив, что вы рветесь в бой, а вас в тылу держат. Попросите рассказать об их планах на ваш счёт.
    Не исключено, что у вас как раз хорошо получается "Настройка тестов, CI/CD, OLAP CUBE, оптимизация запросов к БД", и поэтому вам эти задачи и дают)
    В общем, человеческое общение с коллегами очень часто решает проблемы.
    Если же вы к ним придёте с открытой душой, а вас токсично отошьют, вот тогда подумайте о смене работы.
    Ответ написан
    7 комментариев
  • Как сконфигурировать Nginx для https сервера?

    @99insania99
    В чем смысл делать использовать https в скрипте, а потом перед ним ставить прокси https nginx'ом? Получается шифруем, дешифруем, шифруем, дешифруем... nginx https -> http node.js
    Ответ написан
    5 комментариев
  • Видит ли опсос уровень сигнала на моём аппарате?

    pindschik
    @pindschik
    ФЫВА ОЛДЖ
    Видит. Телефон сообщает. И сам оператор слушает, есть ведь еще и обратный сигнал. Регулирует мощность передатчиков, исходя из общей картины. Приказывает абонентским устройствам сменить частоту или базовую станцию (если абонент видит несколько) исходя из собственных соображений и чувства оптимальности. Приказывает абонентскому устройству поднять или снизить мощность передатчика.

    Примерно так: у БС есть 25 клиентов, из них 10 рядом, 10 далеко, а 5 ближе у другой БС, которая не перегружена.
    Тогда логика будет такой:
    - 10 ближайшим приказать перейти на одну (или несколько) общих частот. Снизить на этих частотах выходную мощность. Приказать абонентам понизить мощность своих передатчиков.
    - 10 дальним - приказать перейти на другую (или несколько) частоты, и поднять на них свою мощность. А клиентам так же подрегулировать мощность их передетчиков вверх - до достижения уверенной слышимости на БС.
    - 5 которые у другой БС - велеть переключится на другую БС и одну из ее частот.
    Ответ написан
    10 комментариев
  • Как мне отписаться от профильного хаба?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Ответ написан
    Комментировать
  • Почему приложение Habr перестало работать на iOS и исчезло из App Store?

    pragmatik
    @pragmatik Куратор тега Хабр
    Хабр всегда делал основную ставку на мобильную версию сайта по адресу https://m.habr.com
    Приложение было создано по принципу: "А давайте наша студия вам бесплатно приложение сделает, а вы нам бесплатно корпоративный блог выделите". Со временем эта студия утратила интерес к доработке приложения и в нем накопилось критическое число недоработок. Устаревание сертификата безопасности поставило точку в его существовании.
    Ответ написан
    1 комментарий
  • Включать ли дедупликацию для бэкапов?

    @rPman
    Veeam Backup не хранит файлы как они были в оригинале, а создает что то типа архива в своем формате, со своими технологиями сжатия и дедупликации, поэтому файловая система не найдет в них копий.

    Дедупликация это в принципе очень слабый механизм сжатия данных, который срабатывает в ограниченном количестве случаев (пофайлово, а точнее поблочно), когда ты делаешь копию файла и чуть чуть его редактируешь (меняя только его часть, вот например текстовые, если ты вставишь/удалишь символ в начале, это сдвинет содержимое всего файла и он будет считаться полностью изменившимся, но замена одного символа в начале позволит хранить только тот блок, в котором было это изменение, а остальное содержимое будет ссылаться на оригинальный файл)
    Ответ написан
  • Как лучше реализовать проверку передачи данных в api?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Отдельно проверять наличие нет смысла. Если уж валидировать, то нормально, каждое поле, на соответствие ожидаемому формату. Ну и заодно и наличие.
    А скопом если проверять, то скорее на наличие лишних полей.

    Плюс никаких исключений. Странно, что я не обратил на это внимание в прошлый раз, там этот говнокод с try catch просто везде. Самому не надоедает всё время писать эти тру, кетч, ретурн для каждого запроса? И с какой стати пользователь API должен читать, что в БД нету например нужной таблицы? Это ВНУТРЕННЯЯ информация, которая не должна утекать наружу

    Как вариант, метод validate должен возвращать массив с ошибками.
    Если массив пустой, то используем данные
    Если не пустой - возвращаем их пользователю.
    Ответ написан
    1 комментарий