Краткий экскурс в веб-разработку для полных прапорщиков или как достоверно определить чей пост был написан раньше
Всем привет!
Сейчас мы немножко отойдём от тематики 3D-печати и поговорим о, казалось бы, несвойственной данному сайту теме - о веб-разработке.
Почему? Да просто так совпало, что пользователь DenisAA навыдумывал себе каких-то небылиц и решил бегать за мной по сайту и спамить под каждым моим сообщением ¯\_(ツ)_/¯
В своём комменте он ссылается на произошедшую ранее историю с постом о сбое в облачной печати у Bambu Lab.
Играть в шахматы с голубем у меня никакого желания нет, так что проще один раз написать для всех, чем каждый раз объяснять как было на самом деле.
Кратко суть:
Я пишу пост, он попадает на модерацию и висит на ней некоторое время.
Новостник сайта публикует пост про это же событие.
Модератор одобряет мой пост, а потом приходит в него с обвинениями "Бояните! Уже было!"
Мякотка в том, что новостнику следовало бы глянуть в список постов на модерации (перед публикованием своего), увидеть мою заметку и идти искать другие новости (про это-то уже написали!).
А получилось как получилось.
Но как доказать, что мой пост был написан раньше? Ведь типичный прапорщик просто посмотрит на дату публикации и скажет "Ололо, ты нам всё врёшь! гыгыгы ))))"
И действительно, выглядит так, что мой пост был написан позже.
А вот теперь погрузимся в некоторые аспекты веб разработки, которые укажут на истину.
Начнём с того, что каждая сущность на сайте, будто пользователь, тег, комментарий или статья представляет из себя экземпляр класса того языка, на котором написан сайт. И у этого класса есть свойства (обязательные или не очень). Например заголовок, текст описания, дата создания, дата публикации, идентификатор автора и многое другое.
Для сайта на php выглядит это примерно так:
Какие-то из полей выводятся на страницу, а какие-то остаются скрыты от глаз пользователей. Например, в качестве даты публикации может выводиться дата последнего обновления, а дата создания быть скрытой.
Обратите внимание на поле "$id" - это главный идентификатор сущности, который однозначно её определяет. Условие уникальности идентификатора обязательно т.к. именно по нему движок сайта понимает с какой сущностью выполняется то или иное действие.
Идентификатор может быть цифровой или строковый (цифробуквенный или цифробуквенный с спец-символами).
Строковые идентификаторы применяются для разных целей, например они могут ограничивать прямой перебор на файловом хранилище ...
... или использоваться для распределенной генерации ID в очень больших системах.
Цифровой идентификатор обычно представляет собой монотонно возрастающее число, допускающее пропуски в диапазоне. Это самый простой для реализации тип идентификатора, а значит и самый распространённый.
Такие ID на сайтах повсюду:
"Монотонно возрастающий" означает, что число только увеличивается, что упрощает генерацию и защищает от дублирования идентификатора.
"Допускающий пропуски" - что при удалении сущности её идентификатор не занимает какая-нибудь новая сущность, а в диапазоне остаётся дырка. Это так же сделано для упрощения генерации.
Конечно бывают реализации цифровых идентификаторов не допускающих пропуски, но это очень редкий специфический случай. Например такое нужно для хитрой пагинации, работающей через диапазоны ID, а не по оффсетам. Не забивайте себе голову, они один фиг только возрастают.
Идентификатор бывает сквозной (для всех сущностей) или локальный (в пределах одного типа сущностей). Пример:
Пользователь_1 - ID 1
Пользователь_2 - ID 2
Коммент_1 - ID 3
Пользователь_3 - ID 4
Тэг_1 - ID 5
Пост_1 - ID 6
Тэг_2 - ID 7
Тэг_3 - ID 8
Это сквозной ID.
Пользователь_1 - ID 1
Пользователь_2 - ID 2
Коммент_1 - ID 1
Пользователь_3 - ID 3
Тэг_1 - ID 1
Пост_1 - ID 1
Тэг_2 - ID 2
Тэг_3 - ID 3
А это локальный.Бывает и смесь сквозного и локальных - всё зависит от специфики движка сайта. Но он, в любом случае, возрастающий.
О чем это всё нам говорит? У сущности, созданной раньше, число будет меньше, у той, что создана позже - больше. No exceptions.
Теперь мы знаем немножко больше и готовы проверять - кто создал пост первым.
Возьмём ID-шники постов из адресной строки и сравним! Но постойте, а где они?
Движок этого сайта не вставляет ID в ЧПУ, тут используется только алиас (псевдоним, slug страницы). Это тоже уникальный идентификатор, только вторичный. Он, в первую очередь, нужен для СЕО и, вроде как, "нравится" поисковикам, слегка влияя на позицию сайта в выдаче.
Нам бы узнать настоящий ID сущности. Как это сделать?
Для этого нужно выполнить с публикацией какое-нибудь действие, которое выполняется бэкэндом. В запросе обязательно будет ID т.к. он необходим для определения целевой сущности с которой выполняется действие.
Например, мы можем попробовать поменять рейтинг статьи и посмотреть заголовки POST-запроса в консоли разработчика:
ID моего поста 83053, ID поста новостной команды - 83054.
Такие дела.
Еще больше интересных статей
Лампа Чужого
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Вдохновение нашёл в фильме «...
Крепление для потенциометра ALPS RK27
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Let`s Cartesian battle begin! Обдумывание различий в кинематиках H-bot, CoreXY, Ultimaker, Makerbot, и поиск истины.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Комментарии и вопросы
сказки они всегда сказки.
Я не понял зачем тут использов...
Тоже делал прям внутри коробки...
Что делать если я первый раз к...
Добрый день. Приобрёл сопло 1м...
Коллеги, такая проблема, уже н...
Добрый день!Господа, среди тех...