• RESTful api: Запрос данных методом POST это плохо?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    GET это неизменяемый тип данных.
    Например get /api/getregion/country/russia
    до 2014 и 2022 он выдавал абсолютно один результат
    В вашем случае пост абсолютно оправдан тк пользователь авторизуется, и фильтры меняются
    Ответ написан
    3 комментария
  • RESTful api: Запрос данных методом POST это плохо?

    vabka
    @vabka
    Токсичный шарпист
    rest - это не стандарт, а просто набор рекомендаций.
    Если у тебя возникает такая задача, где слишком сложно следовать rest не жертвуя удобством и производительностью - вполне нормальная практика отойти от немного (или совсем) rest.
    Есть же ещё стандарт JsonRPC где у тебя всё запрашивается POST-запросами :)

    Ну и да - передавать большие и сложные фильтры в POST-запросе - это вполне распространённая практика
    Ответ написан
    Комментировать
  • TypeORM, какая разница между QueryBuilder и Repository?

    @historydev
    Острая аллергия на анимешников
    Репозиторий говорит сам за себя, это хранилище. С ним вы общаетесь чтобы получить моковую или реальную информацию.
    QueryBuilder - конструктор запросов.

    Из выше сказанного можно построить следующую цепочку:

    Service запрашивает какие-то данные =>
    QueryBuilder строит запрос для указанного репозитория =>
    EntityManager поиск по всем репозиториям =>
    1 Respository
    2 Respository
    3Respository
    Ответ написан
    1 комментарий
  • Mysql, как выполнять события(events) только при условии?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если просто переписать в соответствии с правильным синтаксисом, и при этом избавиться от ненужного IF, то
    CREATE DEFINER=`sql_test`@`%` EVENT `Маркировка` 
    ON SCHEDULE 
        EVERY 1 HOUR 
        STARTS '2022-05-29 23:15:23' 
    -- ON COMPLETION NOT PRESERVE   -- не имеет смысла для периодической задачи
    -- ENABLE                       -- по умолчанию эвент включен при создании
    DO
    UPDATE `tasks` 
    SET `status` = 4  
    WHERE `status` = 3
      AND EXISTS ( SELECT NULL  
                   FROM `config` 
                   WHERE `name` = 'profile_deleting'
                     AND `value` = 'allowed' );

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

    ======

    Впрочем, никто не запрещает сохранить исходный вид:
    CREATE DEFINER=`sql_test`@`%` EVENT `Маркировка` 
    ON SCHEDULE 
        EVERY 1 HOUR 
        STARTS '2022-05-29 23:15:23' 
    -- ON COMPLETION NOT PRESERVE 
    -- ENABLE 
    DO
    BEGIN
      IF (SELECT `value` FROM `config` WHERE `name` = 'profile_deleting') = 'allowed' THEN 
        UPDATE `tasks` SET `status` = 4  WHERE `status` = 3;
      END IF;
    END;

    Но:
    1. при создании такой процедуры придётся переопределять DELIMITER
    2. если подзапрос вернёт более одной записи - это приведёт к ошибке

    Проблему с возвращающим более одной записи подзапросом можно поправить следующим изменением:
    IF 'allowed' IN (SELECT `value` FROM `config` WHERE `name` = 'profile_deleting') THEN
    Ответ написан
    3 комментария
  • Возможно ли узнать последнюю дату изменения таблицы mysql?

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

    Решение через INFORMATION_SCHEMA.TABLES.UPDATE_TIME - это плюс-минус лапоть. Для большинства движков - это время обновления файла таблицы в файловой системе, а вовсе даже не время выполнения последней записи по результатам выполнения последнего запроса на изменение данных (да-да, для долгого запроса это будет SYSDATE() последней изменённой записи, а не CURRENT_TIMESTAMP). Да и на дефолтном InnoDB не всё слава богу - кэширование запросто может добавить несколько секунд, а при отключенном file_per_table и на партиционированных таблицах так и вовсе не работает.
    Ответ написан
    1 комментарий
  • PHP file_put_contents дописывает в файл или перезаписывает его?

    @rPman
    file_put_contents(... FILE_APPEND) дописывает содержимое в конец без пересоздания и перечитывания файла
    это просто упрощенная запись конструкции
    fopen(...,'a');fwrite(...);fclose(...);
    если FILE_APPEND не указывать, то используется режим типа w+ (существующие файлы обрезаются в 0 размер, не существующие ошибки не вызывают)
    p.s. важное замечание file_put_contents FILE_APPEND работает очень медленно, синхронизируя каждую запись с диском, я помню переписывал код на использование fopen/fwrite плюс там можно гибко задавать буфер записи

    upd. на самом деле там используется просто режим 'a' и 'c' и чуть больше проверок
    С интересом обнаружил по исходникам что file_put_contents умеет писать array, объединяя без разделителя значения и пропуская ключи.... век живи век учись, не знаю зачем но смешно
    Ответ написан
    2 комментария
  • PHP file_put_contents дописывает в файл или перезаписывает его?

    DanArst
    @DanArst
    Гриффиндор в моде при любой погоде!
    Если вы читали доку, то там написано, что флаг FILE_APPEND означает, что данные будут дописаны в конец файла вместо его перезаписи.
    Ответ написан
    4 комментария