处理REST中的关系

时间:2012-11-21 18:10:54

标签: http rest restful-architecture

我正在学习如何制作一个好的REST API。所以,假设我有以下模型:

Post
    has title, body, publish_date
    has_many comments, authors

Comment
    has author, publish_date

所以,如果我打电话给GET /post,要获取所有帖子,应该如何回复评论?我想的是:

{
    'post/1': {
        'title': 'My first post',
        'body': 'a big body',
        'publish_date': '20121120',
        'comments': 'post/1/comments',
        'authors': 'post/1/authors'
    },
    'post/2': {
        'title': 'Another post',
        'body': 'a REALLY BIG body',
        'publish_date': '20121121',
        'comments': 'post/2/comments',
        'authors': 'post/2/authors'
    }
}

我也在考虑将每个评论的资源直接放在/post响应中,例如

'comments': {
    'post/1/comment/1',
    'post/1/comment/2',
    'post/1/comment/3'
}

那么,最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

如果每个帖子“拥有”其评论,您只需发送带有帖子数据的评论数据:

{
    'post/1': {
        'title': 'My first post',
        'body': 'a big body',
        'publish_date': '20121120',
        'comments': [/* comment data here */],
        'authors': 'post/1/authors'
    },
    'post/2': {
        'title': 'Another post',
        'body': 'a REALLY BIG body',
        'publish_date': '20121121',
        'comments': [/* comment data here */],
        'authors': 'post/2/authors'
    }
}

您可能希望对作者做同样的事情。经验法则:作为API的使用者,我不想继续进行API调用以获取所有相关数据。如果响应大小/时间是一个问题,至少给我选项来获得后期相关字段;也考虑回应分页。