Size: a a a

Rust — русскоговорящее сообществo

2020 March 22

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
Dmitry Zherebko
Ну тут по разному в некоторых генераторах вообще забивают на это и просто генерят методы что бы получить параметры с контекста
ага. У меня так и есть. Просто генерю структурки, чтобы просто можно было в клиентском коде в аргументах хендлера их заюзать. Но хочется четкого соблюдения контракта. Чтобы нельзя было не заюзать эту структуру и не распарсить
источник

DZ

Dmitry Zherebko in Rust — русскоговорящее сообществo
Еще вот непонятно как статус код возвращать правильно
источник

DZ

Dmitry Zherebko in Rust — русскоговорящее сообществo
В идеале хочется что бы ошибки автоматически выводились, А ты просто писал сервисы
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
Dmitry Zherebko
Еще вот непонятно как статус код возвращать правильно
Я рассуждаю так: Конкретный статус код это забота спецификации апи. Задача клиента завершить обработку. https://github.com/sergeysova/actix-swagger/blob/master/cargo-swagg/out.rs#L159
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
Dmitry Zherebko
В идеале хочется что бы ошибки автоматически выводились, А ты просто писал сервисы
Чтобы автоматически выводилось, нужно их Into/From.
источник

DZ

Dmitry Zherebko in Rust — русскоговорящее сообществo
Ну вот мы сейчас у себя сделали просто общие ошибки которые не имеют привязки к http и потом в проекте свич кейс по этим ошибкам в статус коды
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
Пока что у меня получилось отделить вот так:

https://github.com/authmenow/backend/blob/master/public-api/src/routes/register_confirmation.rs#L26

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

DZ

Dmitry Zherebko in Rust — русскоговорящее сообществo
источник

DZ

Dmitry Zherebko in Rust — русскоговорящее сообществo
вот этот список ошибок + неплохое описание когда использовать
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
я не оч представляю как это переложить на openapi
источник

DZ

Dmitry Zherebko in Rust — русскоговорящее сообществo
источник

DZ

Dmitry Zherebko in Rust — русскоговорящее сообществo
🦉 ⁣
Пока что у меня получилось отделить вот так:

https://github.com/authmenow/backend/blob/master/public-api/src/routes/register_confirmation.rs#L26

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

DZ

Dmitry Zherebko in Rust — русскоговорящее сообществo
из свогера генерится контроллер по сути, код который ты пишешь это сервисы и репозитории, но где указывать статус коды респонсов и хедеры?
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
Dmitry Zherebko
Ну просто кто должен отвечать за возврат и оприделение ошибки?
слой бизнес-правил работает со своими типами ошибок.
слой роутов, конвертирует ошибки бизнес-правил в ошибки спецификации апи
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
а ошибки спецификации апи, уже предустанавливают статусы
источник

DZ

Dmitry Zherebko in Rust — русскоговорящее сообществo
🦉 ⁣
слой бизнес-правил работает со своими типами ошибок.
слой роутов, конвертирует ошибки бизнес-правил в ошибки спецификации апи
Т.е поверх свогера еще один слой?
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
Dmitry Zherebko
Т.е поверх свогера еще один слой?
да
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
3. бизнес-правила
2. слой соединяющий сваггер и бизнес-правила
1. сваггер код, ошибки сети, структуры для сериализации
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
слой 2, по сути решает какая ошибка бизнес-правил, как отображается для пользователя всего API
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
таким образом можно бизнес-правила писать независимо от спеки сваггера и спека сваггера может меняться независимо от бизнес-правил
источник