Size: a a a

Software Design/Architecture/Zen

2021 June 04

IR

I Raimbayev in Software Design/Architecture/Zen
То есть, например, прикрепление "разрешающего документа" для заказа - это "подсущность" к заказу в виде POST api/orders/{id}/permission_papers, если говорить именно про урл, ну и в домене рассматривать как "подсущность"?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
урл это идентификатор ресурса. так что пиши туда что хочешь главное что бы было понятно что это.

не надо думать про "сущности" и вообще - давай не будем притворяться и скажем честно - REST не бывает (потому что нет у тебя элементов гипертекста что бы сервер управлял состоянием клиента) а значит ты просто делаешь json rpc over http и не надо себе голову чушью забивать
источник

SP

Sergey Protko in Software Design/Architecture/Zen
единственный пример REST существующий в природе - набор спецификаций http, uri, html. Именно под этот набор спецификаций Рой Филдинг свои тезисы описывал и больше оно ни про что не говорит. Ты можешь взять из REST хорошие идеи или готовые инструменты (тот же URI или фреймворк для кеширования в http) но это не делает это REST. Более того - тебе и не нужно это.
источник

IR

I Raimbayev in Software Design/Architecture/Zen
Да, я это понимаю. Я не стремлюсь сделать именно REST, а пытаюсь спроектировать наиболее удобный способ взаимодействия, так как у нас не только заказы будут такие многоступенчатые, вот хочется привести к некому единому и удобному виду
источник

IR

I Raimbayev in Software Design/Architecture/Zen
А вообще каких-то пейперов, выступлении, существующих решении на эту тему не встречал в природе кто-нибудь?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
да норм, тут вопрос именно самих переходов и как ты операции проектируешь. Можно сделать просто как ты описал, можно требовать от клиента что бы он перед тем как что-то сделал делал обязательно что-то еще - просто неудобно клиенту будет.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
есть куча их. все на тему "не ебите себе голову и делайте процедурки"
источник

SP

Sergey Protko in Software Design/Architecture/Zen
http.post(`/orders/${id}/confirm`).catch((error) => {
  // handle error
})
источник

SP

Sergey Protko in Software Design/Architecture/Zen
удобно же
источник

SP

Sergey Protko in Software Design/Architecture/Zen
единственное что может сделать это удобнее - сделать put-ом и гарантировать идемпотентность
источник

SP

Sergey Protko in Software Design/Architecture/Zen
тогда я на клиенте смогу просто включить retry-on-failure и в случае 5xx статус кодов буду пробовать еще раз
источник

SP

Sergey Protko in Software Design/Architecture/Zen
разделение на put/post/get/delete может помочь в целом семантику клиента сделать более понятной. Аля... "для put/get/delete" делай ретраи, для post не делай ретраев, для get таймауты поменьше...
источник

IR

I Raimbayev in Software Design/Architecture/Zen
Понял, спасибо за идею, выглядит логично =)
источник

Kd

Konstantin dmz9 in Software Design/Architecture/Zen
репозитории как шаблон же придуман для работы с коллекциями на чтение, а для одноразовой выборки можно dao заюзать, а там хоть максимально нативно, хоть орм подсунь
источник

SP

Sergey Protko in Software Design/Architecture/Zen
коллекции без итератора
источник

Kd

Konstantin dmz9 in Software Design/Architecture/Zen
ну и репо на запись - wtf?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
репозиторий придумали:

- на запись
- доставать одну штуку

Это "коллекция без итератора" - условно мэпа которая предоставляет доступ по ключу
источник

Kd

Konstantin dmz9 in Software Design/Architecture/Zen
ну и запись плюс чтение тут же ломает cqrs
источник

Kd

Konstantin dmz9 in Software Design/Architecture/Zen
итератор или без это уже детали реализации, хоть ленивой её сделай под капотом
источник

MT

Max Trifonov in Software Design/Architecture/Zen
А небыло желание, у коллег из сообщества, пообсуждать идеи и подходы в онлайн... в живую?
источник