如何REST响应组响应以便于客户端使用

时间:2016-03-22 20:17:34

标签: rest restful-architecture restful-url

假设我有两个表,Book和Author,其中每个Book都有一个作者的外键。 /books/端点返回系统中存储的所有书籍的列表。现在假设客户端将使用此列表,并按作者对其进行分组。让服务器返回嵌套并按作者分组的数据,以便客户端不需要它是RESTful吗?是否有一个标准来请求响应的分组方法? (可能类似于/books/?groupby=author

例如:

// flat
[
  {'title': 'Harry Potter', 'author': 'JK Rowling'},
  {'title': 'Harry Potter 2', 'author': 'JK Rowling'},
  {'title': 'Harry Potter 3', 'author': 'JK Rowling'},
  {'title': 'Lord of the Rings', 'author': 'J. R. R. Tolkien'},
]

VS

// nested
[
  {'author': 'JK Rowling', books: 
    [
      {'title': 'Harry Potter'},
      {'title': 'Harry Potter 2'},
      {'title': 'Harry Potter 3'},
    ]
  },
  {'author': 'J. R. R. Tolkien', books:
    [
      {'title': 'Lord of the Rings'}
    ]
  }
]

1 个答案:

答案 0 :(得分:1)

我希望有一个作者资源,可以链接到他们写的每本书,也可以链接到他们所写的所有书籍的集合。在任何一种情况下,您的API都可以支持查询参数“?embed = books”,它会填充返回的JSON中的书籍。

GET /authors/23
{
    "name": "JK Rowling",
    "_links": [
        "books": [
            "/books/4",
            "/books/532"
        ], ...
    ]
}

GET /authors/23?embed=books
{
    "name": "JK Rowling",
    "books": [
        {
            "title": "Harry Potter",
            "author": "/authors/23"
        },
        {
            "title": "Harry Potter 2",
            "author": "/authors/23"
        },
    ]
}

另外,在一个真实的系统中,一本书应该能够拥有多个作者。