我正在使用Django Rest Framework,它已与外部服务集成。每当外部服务中创建新任务时,我都使用端点从Webhook接收回调。
当回调请求进入时,我的代码需要创建至少一个对象。但是有可能需要从多个不同的模型创建多个对象。例如,如果创建了一个新任务,则它可能是由新用户创建的,在该任务中,我还需要创建一个新用户对象来反映这一点。
总共可能有多达5个其他对象作为副作用。我知道可以添加此逻辑的多个不同位置(例如服务层,序列化器,模型,管理器,视图)。但是所有这些似乎都存在问题。
以前有没有人处理过这个问题?如果是这样,您是如何解决的?
答案 0 :(得分:2)
首先,重要的是要了解RPC样式的API和RESTful API之间的区别。简而言之,您可以将RPC API想象成是“动作”的“方法”,而RESTful API则代表了模型的状态。
例如,假设我们要创建一个端点来处理用户注册。
/api/register
。一个可能执行X项操作的寄存器函数。/api/users
。不是一个动作,而仅仅是一个端点,它可以为我们提供现有用户的状态。 GET请求将列出用户,而POST请求将创建一个新用户。话虽如此,通常来说,创建执行X次操作的端点可能不是很“轻松”,并且使用专门命名为“ Django REST 框架”可能不是正确的选择。
因此,在您的特定情况下。我建议您避免创建用作方法的端点,而应将它们视为它们所代表的资源。这意味着,如果您需要创建一个新用户,则向该用户端点发出请求,然后,如果您需要与该用户创建一个新文章,则向该文章端点进行第二次请求。
我认为,如果您确实需要副作用,则应使用信号进行管理。例如,假设您要使用联系表单发送电子邮件。代替使用/api/send_email
端点,而没有代表/api/messages/
模型的Message
端点,然后在创建新消息时使用信号发送电子邮件。
通过这种方式做事,它仍然意味着API端点本身仅代表模型的状态,而修改状态(在创建新消息时发送消息)的副作用则由信号负责