向rest api发出POST请求,然后发出GET请求以获取所添加资源的附加数据



我正在考虑构建后端rest api的最佳方法。我有以下要求:

  1. 客户端发出post请求,添加一个包含ID和元信息的资源
  2. 在我将此资源添加到数据库之前,我需要使用提供的ID向第三方API发出GET请求以获取相关数据。
  3. 然后将原始资源及其相关数据保存到数据库

目前在AddAsync方法中的Repository中,在我将资源持久化到数据库之前,我调用第三方API以基于ID获取有关资源的详细信息,然后在模型上执行SaveChangesAsync,该模型的其余属性由GET请求填充。

然而,这感觉不对,因为我从我的客户端发出POST请求,然后在后端服务器上发出GET请求。有更好的解决方法吗?

IAccountRepository:
public async Task<SupervisorResult> AddAsync(Account newAccount, CancellationToken ct = default)
{        
// GetAccountDataAsync fetches order data that I need to save whenever new Account is added    
SupervisorResult result = await GetAccountDataAsync(newAccount, ct);

if(result.Succeeded == false)
{
_logger.Here().Debug("Failed to get new account data.");
return result;
}
Account freshAccount = (Account)result.Value;
_dbContext.Accounts.Add(freshAccount);
await _dbContext.SaveChangesAsync(ct);
result.Succeeded = true;
result.Value = freshAccount;
return result;
}

从我的角度来看,我不认为在这种情况下做GET调用是一个问题。也许最好的方法应该是管理来自GetAccountDataAsync的可能的异常。

如果用户发送了所有正确的数据,但您的外部系统在创建帐户时出现了一些问题,您的用户不负责"重试";这个过程。
这种改进可能代价高昂,但在用户体验方面应该会更好。

我认为David描述的方法(提升一层)是正确的,所以我更倾向于将与外部系统通信的责任分离到应用程序/逻辑层。

部分完成保存过程的情况下,用户(Account)应该处于某种等待状态

相关内容

  • 没有找到相关文章

最新更新