ТёмнаяМатерия: да, вы не должны изменять/создавать/удалять сущности через GET, делайте это через POST или как принято в RESTful POST - создание, PUT - изменение, DELETE - удаление. GET должен возвращать данные, но не должен их изменять.
Иван Воробей: понял. В таком случае, я бы из клиента отправлял запрос с доп. заголовком с информацией о клиенте: X-Client: iOS v1.0.0
Сервер этот заголовок читает и если он ему не нравится, то отправляет что-нибудь клиенту в ответ.
Иван Воробей: я верно понял, вам нужно уметь банить определенные клиенты? Если так, то едва ли что-то можно сделать. Вы же уже поняли, что любое приложение на клиентской стороне может прикинуться кем угодно. Вы запрещаете ios приложение, а завтра оно прикидывается, что оно android приложение. И работает, как и до.
Иван Воробей: ну можно их удалять после того как expire истек.
Я немного о другом, что в таком случае смысл jwt теряется, т.к. нужно куда-то обращаться, чтобы узнать отозван токен или нет. Отчего ушли (хранение токенов), к тому и пришли (хранение отозванных токенов)
А когда автор захочет отзывать выданные jwt, то начнется эпопея с написанием хаков, суть которых сведется к хранению этих отозванных jwt где-нибудь. На том сайте, что вы привели как раз есть такая статейка. И всё, весь stateless на этом закончится.
> если наружу торчит что-то помимо 80/443 - вы сами себе злобынй буратино
Как тогда управлять удаленным сервером, который находится за пределами локальной сети? Можно ssh повесить на нестандартный порт, но он все равно будет торчать наружу.
IceJOKER: никаких копий нет, все данные во второй нормальной форме. Здесь очевидная связь многие ко многим. Один пользователь может иметь много сообщений и одно сообщение может принадлежать многим пользователям. Следовательно, для такой связи нужна доп. таблица. У вас все тоже самое с таблицей dialog_users, отношение M:M между диалогами и юзерами. Есть у вас в таблице dialog_users какие-то копии? Нет. Так с чего вы вдруг взяли что в таблице user_messages они будут? Эта точно такая же связующая таблица, только между двумя другими сущностями (messages <-> users).
Зелим Бельтоев: ну я про редактирование как пример написал, а так да, нужно еще id автора сообщения хранить, чтобы только он мог редактировать. Да верно, у каждого своя цепочка диалога.
В фейсбуке френдлента похожим образом работает. Проблема аналогичная, аккумулировать посты от всех друзей. Только раскладывается пост по всем френдлентам друзей в фоне, так как друзей может быть десятки тысяч и соответственно если делать это в реалтайме, то создание нового поста может сильно тормозить.
Зелим Бельтоев: тогда ты нарушишь вторую нормальную форму. Проще говоря, будет избыточность данных, то есть дублирование контента в поле message для каждого участника диалога.
Просто подумай, как бы ты в своем решении реализовал редактирование сообщения, которое уже сохранено в базе. Тебе придется обновлять кучу строк, вместо одной.
Артем: нужно еще таблицу добавить user_messages // user_id, message_id и при записи нового сообщения вставлять по строке для каждого участника диалога.
PHP is a popular general-purpose scripting language (c) php.net
Это он появился как препроцессор html. Но это уже история, сегодня на php можно писать что угодно, хоть десктопные приложения. Речь здесь о фронтенде не шла, сказано было о node.js. TypeScript появился из-за ограничений языка из-за которых из js полностью выпал полиморфизм например и как следствие невозможность следовать некоторым паттернам из grasp например. Использовать ts - ради вкуса/привычки равно как не понимать, почему и зачем он появился вообще.
Александр Григорьянц: Да, но на более низком уровне. К примеру нет функций для работы с бд, есть только потоки, а протокол взаимодействия с базой данных пишет уже сам разработчик. Но как правило сообщество уже написало подобный низкоуровневый код и поддерживает более-менее популярные решения.
Но использовать node.js для например тяжелых вычислений не имеет особого смысла, т.к. нужно будет в любом случае форкать дочерний процесс и делать всю работу в нем, чтобы не блокировать main loop. А это тоже самое, как и в случае с php.
Нужно также помнить о специфичном ООП в javascript, многим его недостаточно и приходится писать на TypeScript, а затем компилировать в javascript.
Ну и стоит отметить, что в php мире тоже есть подобная асинхронная платформа - reactphp.
В общем, для легких вычислений node.js неплохо подходит, но конвертировать с помощью этой платформы видео например, немного странно, когда есть уже десятилетиями существующие языки общего назначения, в том числе и php. Нужно смотреть по задачам, может быть разумнее и то и другие использовать в одном проекте.