Как стать автором
Обновить

Комментарии 5

Если вы в случае gRPC генерируете код из спецификации, то почему в случае REST используете GIN, Echo, httprouter и т.п. (как я понимаю, реализуя валидацию и все остальное вручную)? Можно ж по аналогии генерировать код из спецификации через какой-нибудь go-swagger, например.

Хороший вопрос! Для gRPC генерация кода через Protocol Buffers — это стандартный подход, который упрощает работу. В случае с REST я выбираю фреймворки вроде Gin, Echo или httprouter, в зависимости от задачи. Go-swagger хорош для типовых API, но он не всегда подходит, когда нужна гибкость. Например, когда требуется маршрутизация на основе сложных условий, кастомная обработка ошибок или интеграция с нестандартными компонентами. В таких случаях сгенерированный код может быть сложным для модификации и не дать нужной гибкости. С httprouter я могу точно настроить каждый аспект работы API под конкретные требования.

Ну, возможно. Правда я за последние лет 5 ещё не видел ни одного API, которое было бы не реализовать в go-swagger. Даже в самом худшем случае там можно закостылить кастомный роут. Главный плюс go-swagger в том, что код всегда соответствует спецификации - там нет расхождений. Ни на уровне URL, ни на уровне валидаторов. Все остальные инструменты, где документация генерируется из комментариев в коде, такого не дают.

Саги

Если на каком-то этапе что-то пойдет не так, предыдущие шаги могут быть отменены с помощью компенсирующих действий

Весело будет, если при этом сбой произойдёт на компенсирующих действиях. Итог — и не зафиксировались, и не откатились как надо.

Каким способом принято обходить такие беды?

Как обычно, ретраи, балансировка, репликация... Компенсирующие действия выполняются в ответ на невозможность корректно завершить транзакцию: денег не хватает, товар закончился, курьер заболел. Компенсация это обычная транзакция, которая стремится вернуть систему к исходному состоянию в конечном счёте. Здесь не так много общего с Rollback в СУБД.

Например, вы дали 10 тыс. рублей человеку за работу, а он заболел, и хочет вернуть вам средства. 5 тыщ. вернул на карту, 2 тыс. наличкой, а остальное на телефон. Т.е. вам вернулись 10 тыс. но не обязательно в том же виде. Но исходное состояние достигнуто, по бизнесу. Это и есть компенсирующие действия.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории