如何对响应进行RESTfully分组以便于客户端使用

如何对响应进行RESTfully分组以便于客户端使用,rest,restful-architecture,restful-url,Rest,Restful Architecture,Restful Url,假设我有两个表,Book和Author,其中每本书都有一个作者的外键。/books/端点返回存储在系统中的所有书籍的列表。现在假设客户机将使用此列表,并按作者对其进行分组。让服务器返回按作者嵌套和分组的数据,这样客户端就不需要这样做,这是RESTful吗?对于请求响应的分组方法是否有标准?(可能类似于/books/?groupby=author) 例如: vs 我希望有一个作者资源,可以链接到他们写的每本书,或者链接到他们写的所有书的集合。在任何一种情况下,您的API都可以支持查询参数“?emb

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

例如:

vs


我希望有一个作者资源,可以链接到他们写的每本书,或者链接到他们写的所有书的集合。在任何一种情况下,您的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"
        },
    ]
}

另一方面,在实际系统中,一本书应该可以有多个作者。

我不认为有这样的操作标准。分组可以由客户端完成,也可以像您提到的那样作为另一种方法提供。
// 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'}
    ]
  }
]
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"
        },
    ]
}