我正在使用 Django Rest Framework,它与外部服务集成。每当在外部服务中创建新任务时,我都会使用端点从 webhook 接收回调。
当回调请求进来时,我的代码至少需要创建一个对象。但是可能需要从多个不同的模型创建多个对象。例如,如果创建了一个新任务,它可能是由新用户创建的,我还需要创建一个新用户对象来反射(reflect)这一点。
总共最多可以有 5 个额外的对象作为副作用。我知道可以添加此逻辑的多个不同位置(例如服务层、序列化程序、模型、管理器、 View )。但所有这些似乎都有问题。
以前有人处理过这个问题吗?如果是这样,你是如何解决的?
最佳答案
首先,了解 RPC-style API 和 RESTful API 之间的区别很重要。简单地说,您可以将 RPC API 想象为作为“操作”的“方法”,而 RESTful API 表示您的模型的状态。
例如,假设我们要创建一个端点来处理用户注册。
/api/register
.一个可以做 X 件事情的寄存器函数。 /api/users
.不是一个 Action ,而只是一个端点,它为我们提供了存在的用户的状态。 GET 请求将列出用户,POST 请求将创建一个新用户。 话虽如此,可能更清楚一点,一般来说,创建执行 X 次操作的端点可能不是很“安静”,并且使用专门名为“Django REST 框架”的框架可能不会是正确的选择。
所以在你的特殊情况下。我建议您避免创建作为方法工作的端点,而是将它们视为它们所代表的资源。这意味着如果您需要创建一个新用户,则向用户端点发出请求,然后如果您需要使用该用户创建新文章,则向文章端点发出第二个请求。
使用信号产生副作用
我认为如果您确实想要副作用,则应该使用信号来管理它们。例如,假设您想使用联系表单发送电子邮件。而不是拥有
/api/send_email
端点,您改为执行 /api/messages/
代表 Message
的端点模型,然后在创建新消息时使用信号发送电子邮件。通过这样做,它仍然意味着 API 端点本身只代表模型的状态,而修改状态(在创建新消息时发送消息)的副作用转移到信号的责任上。
关于django - 使用 Django Rest Framework 时,我应该如何构造带有副作用的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54778823/