从服务返回 HTTP 响应而不耦合到 Falcon 模块

Returning HTTP responses from service without coupling to Falcon modules

我正在构建我的用户服务,并试图将其与 API 分离。当用户服务遇到错误时,它会按照以下格式在服务上设置一个错误属性:

{
    'message': '<user friendly error message>',
    'code': '<http code>'
}

但是,我根本不想在服务中引用 falcon,所以实际上它看起来像这样:

self.error = {
    'message': 'Duplicate Email',
    'code': 409
}
return False

现在,一旦将其 return 编辑到 API,我需要将其转换为 falcon.HTTP_XXX 对象,这是在以数字为键并以猎鹰对象为参考的路线?如:

responses = {
    409: falcon.HTTP_409
    400: falcon.HTTP_400
}

然后从用户服务中获取 return 然后解析对象将错误编号作为索引传递? 喜欢:

 user = self.user_service.get_user()
 if not user:
     resp.status = responses[self.user_service.error.code]
     return

居然自己找到了解决方案

Falcon 没有将响应存储在字典中,而是提供了一个从整数解析状态的实用程序。

falcon.get_http_status(self.user_service.error.code)

https://falcon.readthedocs.io/en/stable/_modules/falcon/util/misc.html#get_http_status