Это философский пост про JWT, обычно используемые при авторизации, архитектуру вашего кода и собеседования. Это мысли о том, как JWT может замедлить маленький кусочек вашего кода в несколько раз при этом почти не дав ничего вам взамен.
Если вы в танке, то что такое JWT можно прочитать тут: https://habr.com/ru/post/340146/
Итак, JWT - это набор подписанных данных, обычно используемых для авторизации. Так как обычно JWT это история из мира авторизации, он содержит ID пользователя, возможно время жизни токена, список приложений/действия для которых он выписан.
Также JWT содержит в себе указание на имя алгоритма с помощью которого создавался хэш для проверки валидности токена.
JWT хорош тем, что позволяет менять серверу способ создания хэша от данных и не уведомлять об этом клиентов, клиенты об этом узнают из содержимого полученного токена. Но, когда такая смена алгоритма может случиться? Скорее всего никогда, или раз в десятилетие.
Вторая сильна сторона - это стандартизация полей с данными об авторизации (ID пользователя, время жизни, список прав...). Это может быть очень актуально, если:
- Общение происходит между продуктами разных компаний
- Общение проходит между продуктами одной компании, в которой правая рука не знает что делает левая. И поверьте, низкая согласованность отделов даже в компаниях в 100 человек - это суровая реальность.
Маленький микро-итог, JWT хорош если вам нужно поддерживать авторизацию (или иной другой способ обмена данными) между продуктами разных компаний. Или если ваш менеджмент дауны)))
Далее все актуально только для авторизации для приложений в рамках одной компании.
Если мы не хотим использовать JWT и будем генерировать токен без JSON, то:
- Создание токена обойдется в среднем в 4 раза быстрее (примерно 33 тыс токенов, против 111 тыс токенов за секунду)
- Чтение и проверка токена в почти 30 раз быстрее (около 40 тыс токенов против 1 100 тыс токенов за секунду)
[Цифры из PHP8.1]
Да, сами цифры затрачиваемые на одну операцию довольно малы, например, создание JWT происходит в районе 0.00002 сек (на тестовой машине, с i7 камушком). Но в мире высоких нагрузок, даже доли процентов к производительности могут вылиться в сотни и тысячи обработанных запросов...
Маленькое дополнение - то что вы каждый раз не передаете имя используемого хэш алгоритма, не проблема, "секрет" для создания подписей все равно хранится в переменных окружения (или еще где-то), почему бы там же не записать и имя алгоритма ;-)
Мыли для тех кто проходит собеседования
Если ваш потенциальный работодатель спрашивает про алгоритмическую сложность и про авторизацию, можете вспомнить эту статью. Если не вспомнил - можете не вспоминать, проект или считает что "сервера дешевле разработчиков" или имеет проблемы в понимании проектирования, зачем его расстраивать...