POST到Django中的嵌套RESTful资源

时间:2013-06-02 20:39:17

标签: django rest backbone.js tastypie

我正在构建一个REST Web服务,我想了解如何构建资源的最佳方式(性能明智,优雅和最佳实践)。 我有两个与ManyToMany关系的模型,所以我可以设计我的资源端点,如follow(和here解释:

/api/v1/question/{q_id} #to access the question resource

/api/v1/question/{q_id}/answers/{a_id} # to access the answers of a question.

现在使用GET方法完全没问题,如果我想用新答案创建一个新问题,我必须向第一个URL发送POST请求,然后另一个 POST到第二个??尽管往返旅行,它仍然被认为是一种干净的做事方式吗?

P.S我正在使用Django,并且在客户端与BackboneJS的django-simple-restdjango-rest-frameworkdjango-tastypie之间仍然犹豫不决。

1 个答案:

答案 0 :(得分:1)

REST是关于资源的。没有最好的办法。我会给你我的意见(我很长一段时间都运行一个大API)。

为简单起见,我只创建了两个资源:

  • 问题:/api/v1/question/
  • 答案:/api/v1/answer/

为什么呢?因为它很简单。现在,为了使其具有高性能和HATEOAS兼容性,您可以使用不同的替代方案。例如,当您收到问题时,您还可以获得答案列表:

GET /api/v1/question/{q_id}/
{
    'question': 'Should I use REST or SOAP?'
    'created_date': '...',
    'user_id': '99',
    'answers': [
        {
            'answer': 'REST, of course!',
            'user_id': 23,
            'resource_uri': '/api/v1/answers/818/'
        },
        {
            'answer': 'Are you nuts? Use SOAP!',
            'user_id': 12,
            'resource_uri': '/api/v1/answers/915/'
        }
    ]
}

您可以使用与POST类似的方案。

如果您使用Django Tastypie(我有很好的经验),您可以使用字段来完成这个简单的任务。你可以使用50 loc。

重要提示:您确定答案和问题之间有ManyToMany吗?