Что за мода пошла? REST-like HTML CRUD

Adelf

Administrator
Команда форума
@WMix, тут у тебя клиент игры полностью содержит бизнес-логику. И стоит вопрос лишь в синхронизации... какой смысл в таком примере?
 

Adelf

Administrator
Команда форума
Да и даже если и так, никто ж не спорит о пользе batch-запросов... они полезны и в rest и в rpc
 

Вурдалак

Продвинутый новичок
@WMix ты мог так не утруждаться рассказом о том, какая богатая модель на стороне клиента, потому что судя по описанию это совсем другой bounded context; с таким же успехом твой клиент мог отправлять зашифрованный бинарник, потому что, насколько я понял, серверу в целом вообще пофиг на сами события.
 

WMix

герр M:)ller
Партнер клуба
@WMix ты мог так не утруждаться рассказом о том, какая богатая модель на стороне клиента, потому что судя по описанию это совсем другой bounded context; с таким же успехом твой клиент мог отправлять зашифрованный бинарник, потому что, насколько я понял, серверу в целом вообще пофиг на сами события.
ну хоть на таком уровне, ты признал что rest/crud в некоторых случаях имеет смысл
 

Вурдалак

Продвинутый новичок
ну хоть на таком уровне, ты признал что rest/crud в некоторых случаях имеет смысл
Судя по этому комментарию, ты не совершенно не понял пойнт, который мы пытались с @Adelf донести. И вдобавок так и не понял, что REST сам по себе к этому не имеет никакого отношения.
 

AnrDaemon

Продвинутый новичок
По-момему это какая-то инфекция гуляет.
Уже не первый раз за последние пару недель замечаю такую вещь.
Появляется существо, задаёт в меру бессмысленный вопрос, отметает все попытки как-то достучаться до разума по ту сторону монитора и удаляется, хлопнув дверью. Ещё под занавес может бросить что-то типа "все казлы!", если воспитание позволяет.
 

WMix

герр M:)ller
Партнер клуба
@Вурдалак, ну почему (я предположил что под "зашифрованный бинарник" ты подразумеваешь всю игру как есть: карта, деньги, два ствола), как же ты собрался "отправлять зашифрованный бинарник" - если не запиши/получи в том смысле что все глаголы утеряны? это может быть и не rest но сути не меняет - глаголы утеряны, остались глупые межсетевые операции записи/считывания вероятнее всего напрямую вызывающие теже глупые операции в базе/файловой системе
ты не совершенно не понял пойнт, который мы пытались с @Adelf донести
это возможно, как и вероятность того, что ты не понимаешь какой поинт я хочу донести
 

WMix

герр M:)ller
Партнер клуба
до тех пор пока один пользователь работает с системой, все просто и не интересно. если появляется 2й актер (это вероятно ты хочешь донести выражением bounded context), в примере игры это операция купли продажи, голый маппинг на crud уже не работает. но при этом оба пользователя могут менять состояние игры средствами простого rest
пользователь 1, продажа
Код:
PUT /market/lot
product=42&qty=4
пользователь 2, купля
Код:
UPDATE /market/lot/55
хочу также обратить внимание, что на уровне модели результат операции UPDATE /market/lot/55 для пользователь 1 и пользователь 2 будет разным. - В первом случае возникает ошибка "запрещено покупать сам у себя".
это к тому что информация не утеряна, что по минимуму состояние (пользователь отдавший эту операцию) разное.

хочу заверить, что вне зависимости от логики, на уровне маппера произойдут самые обычные crud операции.

что же я хочу донести,
1. rest не имеет никакого отношения к моделе к глаголам и все что ты в моделе представляешь, rest это простая передача состояния и работа с ресурсами это абстракция это стандартизация еще более бедного, абстрактного, классического, браузерного HTTP где существуют только GET и POST.
2. crud также не имеет никакого отношения к моделе, это внутренний интерфейс для repository. (инфраструктура если хочешь)
3. маппинг rest на crud это просто отсутствие модели
4. rpc на самом деле это отсутствие контроллера, ты просто смаппил модель (сервисы) на http запросы.
 

Вурдалак

Продвинутый новичок
@Вурдалак, ну почему (я предположил что под "зашифрованный бинарник" ты подразумеваешь всю игру как есть: карта, деньги, два ствола), как же ты собрался "отправлять зашифрованный бинарник" - если не запиши/получи в том смысле что все глаголы утеряны?
Если ты не знаешь, что такое «bounded context», то советую воспользоваться Google, поискать информацию, это ключевой термин для понимания многих вопросов.
Есть bounded context «Шредер (для бумаги)». Одна и его главных функций — «уничтожить бумагу».
Есть bounded context «Математический анализ», это очень богатый контекст, тут как минимум есть глаголы «дифференцировать», «интегрировать».
Если я в шредер отправляю диссертацию по матану, то происходит просто «уничтожение бумаги», не происходит «интегрирование», «дифференцирование». То, что в одном контексте представляет из себя что-то осмысленное, для другого контексте может быть абсолютно несущественным, либо интерпретироваться совсем иначе.

глаголы утеряны, остались глупые межсетевые операции записи/считывания вероятнее всего напрямую вызывающие теже глупые операции в базе/файловой системе
Они не терялись: save game, load game.

если появляется 2й актер (это вероятно ты хочешь донести выражением bounded context)
Нет, ничего общего. Не нужно фантазировать, нужно почитать определение и посмотреть примеры.

хочу заверить, что вне зависимости от логики, на уровне маппера произойдут самые обычные crud операции.
А на физическом уровне это будут биты.
А на канальном уровне это будут фреймы.
А на сетевом уровне будут пакеты.
А мы говорим про модель, API и нейминг. У нас иной контекст дискуссии.
 

WMix

герр M:)ller
Партнер клуба
если разговор про состояние то разговор про одного или нескольких актеров которые это состояние меняют
если разговор про апи то разговор про 2х актеров которые между собой коммуницируют
при чем тут то, что они "некоторые вещи понимают по разному"? да они клиент и сервер, да задачи другие, да один сконцентрируется на корзине, то другого интересуют заказы. не кидайся от крайнего в зеленое.
й актер (это вероятно ты хочешь донести выражением bounded context)
я просто попытался твои слова на наш разговор натянуть
А мы говорим про модель, API и нейминг. У нас иной контекст дискуссии.
в контексте rest есть ресурсы и основные операции с этими ресурсами
не путай ресурс и модель

по 4м пунктам противоречия есть?
 

Вурдалак

Продвинутый новичок
если разговор про состояние то разговор про одного или нескольких актеров которые это состояние меняют
если разговор про апи то разговор про 2х актеров которые между собой коммуницируют
— где тут сказуемые? С точки зрения русского языка, можно допустить, что предложения неполные, но какое предложение тогда их предваряет? Я понимаю, что возможно, ты уже позабыл русский язык в Германии, но я действительно опасаюсь, что это ранние признаки деменции, т.к. среди симптомов там есть афазия, которая проявляет себя в письменной речи. Ты на регулярной основе выдаёшь какие-то обрывки мыслей, с отсутствием одного или нескольких членов предложения. Поначалу я думал, что ты делаешь это, считая, что тебя и так поймут, но после настойчивых просьб выражаться яснее, ты не не смог исправиться.

Вот ещё несколько примеров:
на весь rpc один action, на каждый rest-endpoint свой action
написать не сложно, как бы там stateless небыло
хочешь это называется before delete
состояние не зависит от сессий, несколько пользователей с различными ролями.
в случае обновления полной публичной сущности могут быть правила в приватных полях регулирующие публикование
Если ты обратишь внимание, то в каждом из них либо пропущено сказуемое, либо оно вовсе не соответствует правилам синтаксиса русского языка, что делает практически невозможным понять то сообщение, которое планировалось донести.

Учитывая, что это по всей видимости работает и в обратную сторону (ты не понимаешь то, что говорят тебе), то я не могу тебе помочь. Я искреннее пытался разговаривать с тобой, как со здравомыслящим человеком, но, к сожалению, это было ошибкой.
 

WMix

герр M:)ller
Партнер клуба
на весь rpc (есть/имеется/hat) один action, на каждый rest-endpoint (есть/имеется/hat) свой action
эту проверку "getCurrentUser()->id !== $id && accountSum->(getCurrentUser()->id) === 0" написать не сложно,
это тоже состояние просто перзистентность меж сессионная == состояние не зависит от сессий
(состояния чего? - просто состояние: конечный автомат, некая абстракция, сущность, ресурс, то что мне преподносят в виде https://ru.wikipedia.org/wiki/Диаграмма_состояний_(теория_автоматов))
и актеров несколько == несколько пользователей с различными ролями
в случае обновления полной публичной сущности могут быть правила в приватных полях регулирующие публикование
до этого еще не дошел, тут бы с актерами и состоянием разобраться, но уже начал, рассказывая что ресурсы и модель разные слова.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
о, так это же наш любимый диалог про рыбалку!
- ты рыбу ловишь?
- нет, я рыбу ловлю
- а, думал, что ты рыбу ловишь!

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

Но batch-запросы ... да нет, я знал, что рано или поздно мы перейдем и на эту дрянь. Ничто в мире не бывает более беспомощным, безответственным и порочным, чем batch-запросы в REST :)
 
Последнее редактирование:

Вурдалак

Продвинутый новичок
@grigori, ты услышал слово «контекст», вдруг ты вспомнил, что когда-то произносил это слово и связал свой пост с текущим диалогом на тему bounded context. Слышал звон, да не знает где он.

Там ты просто притянул за уши разделение API, потому что тебя поставили в неудобное положение вопросом про нейминг. На уровне модели это может (и скорее всего будет) один и тот же bounded context.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Хорошая попытка! Однако, я пишу именно про те самые разные context, которые описаны в известной статье. Слово одно, смысл - разный. Следовательно, API тоже разные.
 

Вурдалак

Продвинутый новичок
Не, ну ты можешь дать ссылку на то, о чём говорю я, но какое отношение имеет к bounded context твой пост? Правильно, никакого.
 

Вурдалак

Продвинутый новичок
@grigori, ну расскажи про свои две модели User, почему они в разных bounded context и какую логику они содержат?

И темы несвязанные: @Adelf просто привёл пример разных действий, которые с точки зрения CRUD выглядят одинаково, к которому ты в итоге придрался, притянув сюда совершенно иную проблему. Я там далее специально указал более удачный пример, на который тебе уже нечего ответить, кроме
по сути вопроса - согласен
Так что успокойся, остынь, ложная тревога, твой пример с разделением API по-прежнему не имеет смысла в контексте вопроса нейминга, который мы изначально и обсуждали.
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
напомню оригинал:
А как в рест например решать вопрос удаления пользвателя. Но в двух вариантах - когда он сам себя удаляет или когда его удаляет админ/модератор.
Дальше идет ошибочный тезис:
Для обоснования процитирую Фаулера:
As you try to model a larger domain, it gets progressively harder to build a single unified model. Different groups of people will use subtly different vocabularies in different parts of a large organization... Time and time again I see this confusion recur with polysemes like "Customer" and "Product".
Дальше ссылка на статью про множественные канонические модели.
  • You can have several canonical models rather than just one.
  • These models may overlap
  • Overlaps between models need not share the same structure
И следствие: "contexts boundary is set by the different way we represent models".

Наши админы и пользователи - это "different groups of people", которые образуют разные контексты для многозначного слова User. Им соответствуют разные модели. Да, эти модели частично пересекаются.
Developers should watch for ambiguity or inconsistency that will trip up design.
 
Последнее редактирование:

Вурдалак

Продвинутый новичок
Дальше идет ошибочный тезис:
Это не ошибочный тезис. It depends, но в 95% это действительно одна и та же модель. Я специально задал этот вопрос, но ты предпочёл на него не отвечать:
@grigori, ну расскажи про свои две модели User, почему они в разных bounded context и какую логику они содержат?
Наши админы и пользователи - это "different groups of people", которые образуют разные контексты для многозначного слова User.
Конечно, админы и пользователи — это, как правило, действительно разные контексты, разные модели. У нас так, например.
Но ты заявил, что сам пользователь должен быть представлен в разных контекстах по-разному.
Я тебя и спросил: с чего ты взял, покажи пример.
Всё проходит по классическому сценарию, когда ты показываешь свою некомпетентность.
Зачем это делать, это же выглядит со стороны просто нелепо.
 
Сверху