2

我正在构建一个 REST Web 服务,我想了解如何构建我的资源的最佳方式(性能方面、优雅和最佳实践)。我有两个具有 ManyToMany 关系的模型,因此我可以设计我的资源端点,如下所示(并在此处解释:

/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 请求,然后再向第二个 URL 发送另一个POST 请求?尽管有往返,它仍然被认为是一种干净的做事方式吗?

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

4

1 回答 1

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介于答案和问题之间的答案吗?

于 2013-06-02T21:33:56.837 回答