【发布时间】:2014-12-16 19:24:34
【问题描述】:
我正在使用 Django Rest Framework 来展示 RESTful API。我有一个路由器/视图集/序列化器为 Person 资源创建端点:
/api/People/<id>/
我想通过某种方式触发对此资源的非幂等操作(例如send-email-to)。我必须这样做而不必重新做很多路由/序列化基础设施的一个想法是向序列化程序添加一个只写布尔字段:
class PersonSerializer(serializers.ModelSerializer):
send_email = serializers.BooleanField(write_only=True, required=False)
然后给模型添加只写属性:
class Person(models.Model):
...
def do_send_email(self, value):
# We also need to check the object is fully constructed here, I think
if do_send_email:
...
send_email = property(fset=do_send_email)
然后我可以PATCH 使用send_email=True 的有效载荷到达终点。
这是使用 REST API 完成类似 RPC 的功能的最佳方式吗?这是在 DRF 中完成此任务的最佳方法吗?理想情况下,我希望尽可能少地解决这个问题(即查看解决方案的代码行数)。 send-email-to 不是我想要处理的唯一操作。
【问题讨论】:
标签: django rest django-rest-framework