【问题标题】:POST to nested RESTful resources in DjangoPOST 到 Django 中的嵌套 RESTful 资源
【发布时间】:2013-05-29 00:48:26
【问题描述】:

我正在构建一个 REST Web 服务,我想了解如何构建我的资源的最佳方式(性能方面、优雅和最佳实践)。 我有两个具有 ManyToMany 关系的模型,所以我可以设计我的资源端点,如跟随(并解释为 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 到第二个 URL ??尽管有往返,它仍然被认为是一种干净的做事方式吗?

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

【问题讨论】:

  • 有哪些替代方案?

标签: django rest backbone.js tastypie


【解决方案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吗?

【讨论】:

  • 这将如何与 Tastypie 中的 POST 和字段一起使用?是的,它的 ManyToMany 字段因为每个答案也可以属于许多问题。有意义吗?
  • 有意义吗?并不真地。但没关系,这是你的软件,你比我更了解需求。
  • 对于 Tastypie:我假设您想同时创建一个包含多个答案的问题。在这种情况下,您可以使用水合物方法。这是完全可行的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多