212 похожих чатов

🙋Привет. Вопрос по РЕСТ шмест штукам. Как бы вы сделали: Есть

такие ресурсы
POST /process
GET /process/:id/status

POST /process/:id/sub-process
POST /process/:id/sub-process/:id/do-sth

Если эти запросы выполнять асинхронно\отдельно, проблем нет. Конкретные данные связанные с ресурсом передаешь, ничего лишнего не получаешь.
Но клиент ОЧЕНЬ хочет делать все синхронно за минимум запросов.
Например - при выполнении /sub-process/:id/do-sth нужно вернуть еще и статус /process.
В итоге все сводится к тому, что роутинг /sub-process переезжает в body метода PATCH /process/:id

PATCH /process/:id
{
"sub-process": [ {...} ]
}

Это норм вариант или есть получше?
Спасибо!

13 ответов

37 просмотров

Забей на рест, делай обычный RPC (например через gRPC) и не парься

Anton Lakotka
Забей на рест, делай обычный RPC (например через g...

У него уже RPC У него клиенгт уже знает какие процедуры вызываются

Dan- Автор вопроса
Anton Lakotka
Забей на рест, делай обычный RPC (например через g...

Да я особо не заморачиваюсь с рестом, просто есть общий стиль в проекте, и все +- норм на ресурсы лягло. Но вот требования заставляют меняться))

Вроде как это хорошая практика - при создании или изменении ресурса возвращать ресурс целиком

"Клиент ОЧЕНЬ хочет делать все синхронно за минимум запросов" - это адекватное пожелание включающее в том числе уменьшение контроля на стороне клиента. Он хочет просто отправить запрос и просто получить результат, не имея большой фрагментации подпроцесов и потребности в столь высоком контроле за каждым из шагов бизнес-процеса. "Это норм вариант?" - это норм вариант. Возможно вам есть смысл разделить на несколько GET-запропосв и получать статус как по главному процессу, так и по саб-процессу, но возможно клиент захочет это иметь в виде опционального расширения в рамках одного GET, т.е. иметь GET /process/:id/status?with-sub-processes=[ids...] Как договоритесь так и будет

Dan- Автор вопроса
Max Grom
"Клиент ОЧЕНЬ хочет делать все синхронно за миниму...

Я так подумал, это ведь не уменьшает контроль на стороне клиента, только в определнных случаях сокращает количество запросов и меняет роутинг вызова операция с URL на body.🤨 Клиенту в любом случае нужно выполнять эти запросы, и знать в каком случае их можно выполнять. Отличие только в том, как сформирован запрос. Возможно, контроль\знание про происходящий процесс на стороне клиента может уменьшить с помощью hypermedia.

Dan
Я так подумал, это ведь не уменьшает контроль на с...

Меньше вызовов = меньше точек отказа = меньше необходимость в контроле. Это не меняет количество точек отказа в принципе, но с точки зрения клиента - сильно упрощает интерфейс взаимодействия. Вопрос лишь в том, насколько вы можете делать это самостоятельно "на стороне сервера" и насколько можете предоставить такой интерфейс

Dan- Автор вопроса

Блин, вариант с PATCH /process/:id { "sub-process": [ {...} ] } Странно смотрится, мне нужно не просто обновить /process/:id а вызвать у sub-process определенное действие, получается переизобретение RPC POST /process/:id { "action": "do-sth-with-sub-process", "parameters": {...} } Эх, все как-то сложно с этой агрегацией ☹️

формат урлов и тип запроса к ресту постоку поскоку

Dan- Автор вопроса
The Ant 🐜
формат урлов и тип запроса к ресту постоку поскоку

Ну да)) больше интересовало как все покрасивее\удобнее вызвать и собрать в кучу

Dan
Ну да)) больше интересовало как все покрасивее\удо...

старые ручки не будут использоваться, то есть клиент полностью заменяет несколько вызово на один?

Dan
Блин, вариант с PATCH /process/:id { "sub-p...

у тебя есть 2 пути: 1. смириться с тем что "то что люди называют рест" это просто json (обычно, иногда xml но уже как-то не особо встречается) rpc over http. и что от оригинального тэдиса Роя Филдинга там только то что за счет того что юзается http и uri мы тип чуть-чуть юзаем то о чем он писал но лишь совсем чуть-чуть. 2. можно воспринимать "действия" как ресурсы и тогда все по ресту) И put или post выбирать только исходя из вопроса идемпотентности (идемпотентен - берем put, нет - post). а patch не входит в спеку

Sergey P
у тебя есть 2 пути: 1. смириться с тем что "то чт...

Использовали оба варианта в разных проектах. Во втором варианте больше бойлерплейта надо генерить, плюс некоторые девелоперы через какое-то время скатываются к первому варианту уже для следующего левела ресурсов и тратиться время, чтобы поддерживать чёткое понимание/следование выбранной стратегии

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта