В настоящее время я разрабатываю серверную часть веб-приложения. В одной из моих конечных точек есть три разных служебных вызова:
- Первый служебный вызов: вызывает внешнюю конечную точку для регистрации платежа. Он возвращает объект Payment.
- Второй вызов службы: используя объект Payment, возвращенный при первом вызове, вызывает внешнюю конечную точку для проверки этого платежа. Возвращает номер подтверждения и URL-адрес.
- Третий вызов службы: вызывает внешнюю конечную точку, чтобы добавить в таблицу Google информацию о платеже, номере подтверждения и URL-адресе, полученную ранее.
Во всех этих службах выполняются записи в базу данных моей собственной системы и вызовы внешних API, которые создают записи во внешней базе данных (за исключением последнего вызова службы, где запись находится только в листе Google).
Мой вопрос: как я могу справиться с ошибкой, возникающей после первого или второго вызова службы? Предположим, что по какой-то причине третий сервис возвращает ошибку. Первая и вторая операции уже были выполнены, и я не могу отменить то, что уже было сделано во внешней базе данных. Итак, как лучше всего справиться с этими вложенными случаями? Я думал о вложенных обработчиках try-Exception, но не уверен, что часть «кроме» будет делать во внешних вызовах API, поскольку нет возможности их откатить.
Если вы хотите лучше понять, это моя конечная точка. Написан на Python
@endpoint(route="register-payment", methods=["POST"])
@staticmethod
def register_payment(http_request: Request) -> RestResponse:
request = RegisterPaymentRequest.model_validate_json(http_request.body)
payment = InsuranceService.register_payment(
transaction_id=request.transaction_id,
payment_id=request.payment_id,
amount=request.amount,
invoice_id_list=request.invoice_id_list,
)
invoices = []
for invoice_id in request.invoice_id_list:
invoice = InvoiceRepository.filter(
idefact=invoice_id,
).first()
if invoice:
invoices.append(invoice)
verification = InsuranceService.verify_payment(
register_id=payment.register_id,
invoices = invoices
)
SheetsService.write_payment(
invoices=invoices,
payment=payment,
numreling=verification.numreling,
urlrep=verification.urlrep
)
return RestResponse(
status=rest_status.HTTP_200_OK,
data=Response(
code="0",
error=False,
message="Payment validated successfully",
data={
"numreling": verification.numreling,
"urlrep": verification.urlrep
},
).to_dict(),
)
Подробнее здесь: https://stackoverflow.com/questions/798 ... d-services
Как обрабатывать ошибки в контроллере с вложенными сервисами? ⇐ Python
Программы на Python
-
Anonymous
1771006386
Anonymous
В настоящее время я разрабатываю серверную часть веб-приложения. В одной из моих конечных точек есть три разных служебных вызова:
- Первый служебный вызов: вызывает внешнюю конечную точку для регистрации платежа. Он возвращает объект Payment.
- Второй вызов службы: используя объект Payment, возвращенный при первом вызове, вызывает внешнюю конечную точку для проверки этого платежа. Возвращает номер подтверждения и URL-адрес.
- Третий вызов службы: вызывает внешнюю конечную точку, чтобы добавить в таблицу Google информацию о платеже, номере подтверждения и URL-адресе, полученную ранее.
Во всех этих службах выполняются записи в базу данных моей собственной системы и вызовы внешних API, которые создают записи во внешней базе данных (за исключением последнего вызова службы, где запись находится только в листе Google).
Мой вопрос: как я могу справиться с ошибкой, возникающей после первого или второго вызова службы? Предположим, что по какой-то причине третий сервис возвращает ошибку. Первая и вторая операции уже были выполнены, и я не могу отменить то, что уже было сделано во внешней базе данных. Итак, как лучше всего справиться с этими вложенными случаями? Я думал о вложенных обработчиках try-Exception, но не уверен, что часть «кроме» будет делать во внешних вызовах API, поскольку нет возможности их откатить.
Если вы хотите лучше понять, это моя конечная точка. Написан на Python
@endpoint(route="register-payment", methods=["POST"])
@staticmethod
def register_payment(http_request: Request) -> RestResponse:
request = RegisterPaymentRequest.model_validate_json(http_request.body)
payment = InsuranceService.register_payment(
transaction_id=request.transaction_id,
payment_id=request.payment_id,
amount=request.amount,
invoice_id_list=request.invoice_id_list,
)
invoices = []
for invoice_id in request.invoice_id_list:
invoice = InvoiceRepository.filter(
idefact=invoice_id,
).first()
if invoice:
invoices.append(invoice)
verification = InsuranceService.verify_payment(
register_id=payment.register_id,
invoices = invoices
)
SheetsService.write_payment(
invoices=invoices,
payment=payment,
numreling=verification.numreling,
urlrep=verification.urlrep
)
return RestResponse(
status=rest_status.HTTP_200_OK,
data=Response(
code="0",
error=False,
message="Payment validated successfully",
data={
"numreling": verification.numreling,
"urlrep": verification.urlrep
},
).to_dict(),
)
Подробнее здесь: [url]https://stackoverflow.com/questions/79887649/how-to-handle-errors-in-a-controller-with-nested-services[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия