@oop_ru

Страница 425 из 785
Sergey
12.12.2017
09:33:25
как будешь проверять что password валиден?

и что мы можем поменять пароль?)

в идеале у тебя как-то по этому запросу должен быть вызван метод у сущности User - changePassword($password, $newPassword). ИЛи так уже не выйдет? или нам придется по схеме тела запроса понимать что дергать?

Борис
12.12.2017
09:35:12
Ну дейсвий будет чуть больше, чем обычный POST /user/updatepass Но зато что мой вариант создания чувака (регистрации) POST /users/ что апдейт пароля PATCH /users/{id} внутри (после контроллера) поедут внутрь одного и того же кода

Google
Sergey
12.12.2017
09:37:07
Ну дейсвий будет чуть больше, чем обычный POST /user/updatepass Но зато что мой вариант создания чувака (регистрации) POST /users/ что апдейт пароля PATCH /users/{id} внутри (после контроллера) поедут внутрь одного и того же кода
1. у тебя есть ресурс /users/{id}. 2. у тебя есть 3 операции с одним и тем же http verb для одного ресурса (изменение профайла, изменение пароля, изменение email-а). Отличия только по схеме тела запроса, если по тому что ты предлагаешь делать 3. как мне преобразовать это в разные вызовы методов с разными аргументами для моей доменной модели?

ну то есть маршрутизация действий на основе схемы запроса

Adel
12.12.2017
09:38:01
Yes - if (present($password && $newPassword) {changePassword($password, $newPassword)} ?
ну это уж совсем ни в какие ворота :)

Sergey
12.12.2017
09:38:29
чем это лучше POST users/{id}/changeEmail, POST users/{id}/changePassword, PUT /profiles/{id}

Борис
12.12.2017
09:38:30
Да нету маршрутизации... блять, Адепты IF замените это на ивент или стратегию. IF хуйня - но в данном вопросе спор не об этом.

Sergey
12.12.2017
09:38:42
1. в чем профит твоего подхода для клиента? 2. в чем профит твоего подхода для сервера?

если что мне как фронтендеру выгоднее иметь у ресурса 3 разных метода которые принимают на вход разные схемы, нежели 1 метод который принимает anyOf от 3 схем

как бэкэндеру мне это так же выгоднее так как проще организовать маршрутизацию

Aleh
12.12.2017
09:39:55
чем это лучше POST users/{id}/changeEmail, POST users/{id}/changePassword, PUT /profiles/{id}
чет тебе не нравится PUT /users/{id}/password и PUT /users/{id}/email?

Sergey
12.12.2017
09:40:17
чет тебе не нравится PUT /users/{id}/password и PUT /users/{id}/email?
ммм... ну на счет email там PUT хорошо, а вот с паролем - там не идемпотентная операция.

Dmitry
12.12.2017
09:40:22
за что битва?... HTTP methods vs URI Path? глупо взрослым людям о таком спорить...

Google
Sergey
12.12.2017
09:40:46
за что битва?... HTTP methods vs URI Path? глупо взрослым людям о таком спорить...
у человека есть мнение что стоит обмазываться PATCH методом и делать маршрутизацию на основе схемы

Dmitry
12.12.2017
09:40:58
ну пусть делает, это же вкусовщина

Sergey
12.12.2017
09:40:59
ну там POST мб, да
ну то есть это уже не важно, там дальше вопрос идемпотентности операции

ну пусть делает, это же вкусовщина
мне может быть потом поддерживать его код)

Борис
12.12.2017
09:41:33
1. у тебя есть ресурс /users/{id}. 2. у тебя есть 3 операции с одним и тем же http verb для одного ресурса (изменение профайла, изменение пароля, изменение email-а). Отличия только по схеме тела запроса, если по тому что ты предлагаешь делать 3. как мне преобразовать это в разные вызовы методов с разными аргументами для моей доменной модели?
Да, у меня операции 3, а может и 10 для одного юзера. В зависимости от того, что ты передашь в теле - будут посланы емейлы или не будут. Я могу использовать один и тот же запрос для любого изменения, я не буду плодить свои ендпоинты. И код будет один. Если тебе при передаче двух паролей нужно перегенерить хеши - то if это не проблема. Зато у меня код(даже контроллера) прописана один раз. А не 100-500 методов на каждый чих. Клиент в любой момент может добавить поле - и все работает. Тебе же нужно для каждого чиха добавлять новый эндпоинт.

Dmitry
12.12.2017
09:41:56
ну.. по чесноку, не должно быть большой разницы в поддержке кода... роутинг один, какая разница, что он разбирает - URI или HTTP метод + URI + заголовки

Борис
12.12.2017
09:43:07
как бэкэндеру мне это так же выгоднее так как проще организовать маршрутизацию
Лол у меня один роут. У тебя 3 - кому проще? Для клиента у меня один урл, один запрос - у тебя три... почему три проще одного?

Aleh
12.12.2017
09:43:47
проще 3 роута, потому что роутер уже написан, а тут приходится выдумывать роутер по схеме тела запроса

Aleh
12.12.2017
09:43:48
брр

Adel
12.12.2017
09:44:20
ну в квартирах почемуто делают отдельно кухню, ванну и спальню :) и не просто так. унитазов на кухне я чтото не видел...

Aleh
12.12.2017
09:44:34
Походу какой-то реальный кейс. Распиши еще раз, чтобы я понял (пока что не понял, что за портянка).
два действия: 1. смена пароля 2. смена email Для смены пароля в теле запроса должны приходить старый пароль, новый пароль и емейл Для смены емейла надо отправлять пароль и новый емейл

Борис
12.12.2017
09:45:22
Ну если чего-то не хватает, чтобы операция прошла успешно за один API call то ничего не произойдет.

Aleh
12.12.2017
09:45:37
ситуация: на клиенте багуля и вместо нового пароля посылается undefined, ты меняешь email?

Sergey
12.12.2017
09:46:02
Google
Sergey
12.12.2017
09:46:15
короч это какой-то CRUD way для работы с данными

Aleh
12.12.2017
09:46:21
кинет ошибку и не даст тебе сделать оба действия)
а какую, по-хорошему должен сказать, что схеме не соответствует, но как он это поймет?

Maksim (Ellrion)
12.12.2017
09:46:22
мне проще) потому что нет if-ов
а нельзя совмещать? т.е. какие то стандартные данные меняются в обычно patch а для чего то со своей доп логикой (смена статуса, пароля и т.п.) уже отдельные ендпоинты? и насколько некорректно будет patch метод (а не пост) на таких ендпоинтах?

Aleh
12.12.2017
09:46:31
Sergey
12.12.2017
09:46:38
мне больше прельщает мысль что у каждого ресурса своя недвусмысленная определенная схема. С path так не выйдет. либо это будет массив операций.

Aleh
12.12.2017
09:47:10
короче переизобретать роутер по схеме тела так себе идея, как мне кажется

Sergey
12.12.2017
09:47:28
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH

короче переизобретать роутер по схеме тела так себе идея, как мне кажется
я с этим сталкивался) правда не для PATCH а для POST запросов... это та еще боль

Sergey
12.12.2017
09:48:59
Ес.
ну тогда нам с тобой не по пути)

Борис
12.12.2017
09:49:06
а какую, по-хорошему должен сказать, что схеме не соответствует, но как он это поймет?
Ошибку которую ты и хотел "что-то там ты не передал - операция не может быть совершена".

Dmitry
12.12.2017
09:49:16
не, если нравится, то почему бы и нет... но, блин... не аксиома совсем

Aleh
12.12.2017
09:49:26
только не для того запроса, который хотелось

в общем случае как ты будешь решать конфликты схем для разных запросов. Вот есть у тебя две разные операции по смыслу, у которых одна и таже схема или же одна схема является расширением другой?

Борис
12.12.2017
09:50:20
короче переизобретать роутер по схеме тела так себе идея, как мне кажется
Нету никакого роутинга. Есть бизнесстребования "Если хочешь новый пароль, передай старый" if (newPass){checkOld} Это Все, никаких маршрутов. Это бизнесстребования.

Maksim (Ellrion)
12.12.2017
09:50:20
можно, конечно, но зачем тебе PATCH?
ну так как по сути мы меняем часть ресурса. плюс чаще всего это не идемпотентные запросы. т.е. сменить пароль например мы не можем дважды, так как не пройдет проверку на текущий пароль

Sergey
12.12.2017
09:50:30
Ошибку которую ты и хотел "что-то там ты не передал - операция не может быть совершена".
вот ты просто мне скажи - зачем так усложнять когда можно просто 3 роута сделать. это ж проще. Проще объяснять как взаимодействовать. Проще разруливать ситуации разные.

Google
Sergey
12.12.2017
09:50:36
почему ты считаешь что это "хорошо"?

Aleh
12.12.2017
09:50:49
Sergey
12.12.2017
09:50:58
ну так как по сути мы меняем часть ресурса. плюс чаще всего это не идемпотентные запросы. т.е. сменить пароль например мы не можем дважды, так как не пройдет проверку на текущий пароль
по сути нам надо выполнить операцию а не патч применить. Да и "описание изменений" штука намного сложнее нежели кусок стэйта.

Борис
12.12.2017
09:51:16
только не для того запроса, который хотелось
Ну так проблемы пролетарии буржуазию не парят. Я напишу, что тебе не хватает филда. (А если ты сунешь дополнительные поля, которых ты не хотел всунуть то это твои проблемы (клиента))

Борис
12.12.2017
09:51:53
Если транзакции, то это отдельный ресурс.

Aleh
12.12.2017
09:51:55
Баланс как обычное поле user? Или транзакция?
как обычное поле, ну пускай не баланс, а адрес

Борис
12.12.2017
09:53:09
я не понимаю, как ты поймешь, что я имел ввиду смену пароля, а не смену емейла
Я не имеею ввиду ничего. Я пишу код. Если пришел новый емейл - смотрим можем ли мы его обновить. В твоем кейсе нет, нужно еще пароль. Если бизнесстребования такого нету, то просто обновляем модель. Если вс ебизнесстребования выполнены то $em->flush()

Aleh
12.12.2017
09:54:21
Я не имеею ввиду ничего. Я пишу код. Если пришел новый емейл - смотрим можем ли мы его обновить. В твоем кейсе нет, нужно еще пароль. Если бизнесстребования такого нету, то просто обновляем модель. Если вс ебизнесстребования выполнены то $em->flush()
а я имею) Еще раз для смены пароля нужны три поля: старый пароль, новый пароль и емейл. Для смены мейла два поля: пароль и емейл. Как ты отличаешь, что забыли указать новый пароль и кидаешь ошибку от запроса на смену емейла?

Борис
12.12.2017
09:54:39
нету роутов, я не проксирую реквесты в другие контролеры или другие сервисы. Я делаю бизнесслогику. Если тебе нужны проверки на какие-то поля - ставь. Не нужны - не ставь. В чем проблема. Way действительно CRUD но вайнот?

Сча отвечу.

Aleh
12.12.2017
09:55:48
ситуация: на клиенте багуля и вместо нового пароля посылается undefined, ты меняешь email?

Sergey
12.12.2017
09:55:49
НОУ
а где ты принимаешь решение о том что надо сделать?)

мне вот интересно - ты реально юзаешь PATCH так как описал?)

я поверю только если в целом от API нужен тупой CRUD, но тогда о каком PATCH мы можем говорить...

Google
Борис
12.12.2017
10:01:15
а я имею) Еще раз для смены пароля нужны три поля: старый пароль, новый пароль и емейл. Для смены мейла два поля: пароль и емейл. Как ты отличаешь, что забыли указать новый пароль и кидаешь ошибку от запроса на смену емейла?
$errors = $userValidator->validate($user) методы внутри валидации: 1. if ($newPassword) {checkOldPassword($oldPass), checkEmail()}; 2. if ($newEmail) {checkOldPassword()); Так как ты не передал новый пароль - упадет 1 валидация, и дальше интерпритатор не пойдет.

Борис
12.12.2017
10:01:44
И ЧО

если у тебя запрос будет делать половину запроса, а другую отбрасывать .... ятебе не завидую

где твоя атомарность блЕЯТЬ

Борис
12.12.2017
10:02:41
не пиши баги в клиенте

если на клиенте одна форма - заполни ее правильно. Если две, передавай только новый емейл и пароль

Aleh
12.12.2017
10:03:26
Борис
12.12.2017
10:03:41
почему? Новый пароль не передан - нету проверки

Aleh
12.12.2017
10:04:01
почему? Новый пароль не передан - нету проверки
как ты собираешься отличать undefined от непередан?

Борис
12.12.2017
10:04:15
ебать, а как у тебя в PHP выглядит undefined

Aleh
12.12.2017
10:04:21
никак, подсказка

Борис
12.12.2017
10:04:35
если ты докалебываешься до псевдокода, то давай поговорим о псевдокоде.

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

Борис
12.12.2017
10:06:20
Он же корректный, ты только про емейл спрашивал.... бля я устал.

PATCH не должен передавать все поля

Aleh
12.12.2017
10:06:43
короч я понял как ты это видишь

Борис
12.12.2017
10:08:47
Короче, Да серега, я так делаю, и пока я не разрабатываю фейсбук меня все устраивает (и устраивало). Если у меня будут намеки на пиздец сложные запросы, то я заюзая graphql а там почти тоже самое (CRUD LIKE) (сча опять полетят помидоры :( ) только можно выбирать еще извращеннее, и вот там уже есть роутинг на уровне запросов.

Aleh
12.12.2017
10:09:04
Он же корректный, ты только про емейл спрашивал.... бля я устал.
я на эту проблему в общем-то и пытался указать, у тебя частая ситуация, где нельзя отличить корректный запрос от некорректного возникает, может работать на каких-то простых формах, наверное

Страница 425 из 785