RESTful API能否在一个请求中返回多个资源?
我想在日历中显示事件,但事件来自API中的多个资源。在有效负载中执行返回多个资源的单一路由以避免调用多个路由(前端),这是一种不好的做法吗 例如,不打电话 GET/users/42/availabilities?minDate=1999-01-01&maxDate=2001-01-01RESTful API能否在一个请求中返回多个资源?,rest,api,http,uri,Rest,Api,Http,Uri,我想在日历中显示事件,但事件来自API中的多个资源。在有效负载中执行返回多个资源的单一路由以避免调用多个路由(前端),这是一种不好的做法吗 例如,不打电话 GET/users/42/availabilities?minDate=1999-01-01&maxDate=2001-01-01 [{ startDate: '2000-01-01 00:00', endDate: '2000-01-01 01:00' }] [{ type: 'project-presentation',
[{
startDate: '2000-01-01 00:00',
endDate: '2000-01-01 01:00'
}]
[{
type: 'project-presentation',
startDate: '2000-01-01 00:00',
endDate: '2000-01-01 01:00'
}]
{
availabilities: [{ // equivalent of GET /users/42/availabilities?minDate=1999-01-01&maxDate=2001-01-01
startDate: '2000-01-01 00:00',
endDate: '2000-01-01 01:00'
}],
events: [{ // equivalent of GET /users/42/events?minDate=1999-01-01&maxDate=2001-01-01
type: 'project-presentation',
startDate: '2000-01-01 00:00',
endDate: '2000-01-01 01:00'
}],
}
GET/users/42/events?minDate=1999-01-01&maxDate=2001-01-01
[{
startDate: '2000-01-01 00:00',
endDate: '2000-01-01 01:00'
}]
[{
type: 'project-presentation',
startDate: '2000-01-01 00:00',
endDate: '2000-01-01 01:00'
}]
{
availabilities: [{ // equivalent of GET /users/42/availabilities?minDate=1999-01-01&maxDate=2001-01-01
startDate: '2000-01-01 00:00',
endDate: '2000-01-01 01:00'
}],
events: [{ // equivalent of GET /users/42/events?minDate=1999-01-01&maxDate=2001-01-01
type: 'project-presentation',
startDate: '2000-01-01 00:00',
endDate: '2000-01-01 01:00'
}],
}
我可以做一个路线,返回两个资源的结果吗?这是一种好的做法吗
GET/users/42/calendar?minDate=1999-01-01&maxDate=2001-01-01
[{
startDate: '2000-01-01 00:00',
endDate: '2000-01-01 01:00'
}]
[{
type: 'project-presentation',
startDate: '2000-01-01 00:00',
endDate: '2000-01-01 01:00'
}]
{
availabilities: [{ // equivalent of GET /users/42/availabilities?minDate=1999-01-01&maxDate=2001-01-01
startDate: '2000-01-01 00:00',
endDate: '2000-01-01 01:00'
}],
events: [{ // equivalent of GET /users/42/events?minDate=1999-01-01&maxDate=2001-01-01
type: 'project-presentation',
startDate: '2000-01-01 00:00',
endDate: '2000-01-01 01:00'
}],
}
谢谢 TL;医生:是的,请讲;要知道这是有后果的 较长的答案有点纠结。需要理解的重要一点是,资源与资源标识符是1:1。您在响应
get
请求时返回的消息体是该资源的表示
所以如果你从
/A
/B
您决定,对于某些需要粗粒度的用例,您可以引入一种新的资源
/A-and-also-B
其中/A-和-A-B
的表示是/A
的一些投影与/B
的一些投影合并
假设媒体类型具有正确的片段语义,您甚至可以使用
/A-and-also-B#A
/A-and-also-B#B
以获得组合表示的A和B部分
然而,就REST客户机而言,/a
或/B
和/a-and-allow-B
之间没有等价性。它们是三种不同的资源。它们使用不同的键进行缓存,使其中一个键无效不会影响其他键
GET /A
GET /A-and-also-B
PUT /A <-- invalidates previously cached A, but does _not_ invalidate /A-and-also-B
GET/A
得到A和B
PUT/ATL;医生:是的,请讲;要知道这是有后果的
较长的答案有点纠结。需要理解的重要一点是,资源与资源标识符是1:1。您在响应get
请求时返回的消息体是该资源的表示
所以如果你从
/A
/B
您决定,对于某些需要粗粒度的用例,您可以引入一种新的资源
/A-and-also-B
其中/A-和-A-B
的表示是/A
的一些投影与/B
的一些投影合并
假设媒体类型具有正确的片段语义,您甚至可以使用
/A-and-also-B#A
/A-and-also-B#B
以获得组合表示的A和B部分
然而,就REST客户机而言,/a
或/B
和/a-and-allow-B
之间没有等价性。它们是三种不同的资源。它们使用不同的键进行缓存,使其中一个键无效不会影响其他键
GET /A
GET /A-and-also-B
PUT /A <-- invalidates previously cached A, but does _not_ invalidate /A-and-also-B
GET/A
得到A和B
非常感谢你的回复!现在更清楚了:)非常感谢您的回复!现在更清楚了:)