Металл2024 Реклама
Метобр2024 Реклама

Краткий экскурс в веб-разработку для полных прапорщиков или как достоверно определить чей пост был написан раньше

TheRaven
Идет загрузка
Загрузка
10.01.2024
980
27
Личные дневники

Подпишитесь на автора

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

Отписаться от уведомлений вы всегда сможете в профиле автора.

10

Всем привет!

Сейчас мы немножко отойдём от тематики 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.

Такие дела.

Подпишитесь на автора

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

Отписаться от уведомлений вы всегда сможете в профиле автора.

10
Комментарии к статье
Кремень КБ1 Реклама
Кремень КМ1 Реклама