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 ответов

11 просмотров

Забей на рест, делай обычный 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. смириться с тем что "то чт...

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

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
Кто создает тут ботов для телеграмм групп ?
Antskup
8
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
14
Вроде бы вопрос уже заезжанный, но тем не менее У меня есть функция menu() которая выводит набор возможных действий, а затем спрашивает у пользователя что он хотел бы сделать....
David Golovatin
2
Я хочу запустить свой проект в тг. Что-то между пирамидой и майнилкой. Еще подобного ничего не было. Уникальная идея. Нужен именно не бот, а приложение. С ввод, выводом тон...
Павел А.
6
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Карта сайта