我正在构建一个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-rest,django-rest-framework和django-tastypie之间仍然犹豫不决。
答案 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
吗?