Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest 休息-扩展关系_Rest - Fatal编程技术网

Rest 休息-扩展关系

Rest 休息-扩展关系,rest,Rest,我正在建立一个事件管理系统。该模式描述如下。API理解这些关系,并在请求结果中返回指向相关资源的链接。比如说, GET /Events/1 "links": { "Venue": "/Venues/1", "Tickets": "/Tickets?event_id=1", "Teams": "/Teams?event_id=1", "Registrations": "/Registrations?event_id=1" } 我读到的关于REST和HAT

我正在建立一个事件管理系统。该模式描述如下。API理解这些关系,并在请求结果中返回指向相关资源的链接。比如说,

GET /Events/1

    "links": {
    "Venue": "/Venues/1",
    "Tickets": "/Tickets?event_id=1",
    "Teams": "/Teams?event_id=1",
    "Registrations": "/Registrations?event_id=1"
}
我读到的关于REST和HATEOAS的大部分内容表明,这是一种“正确”的方法,但效率非常低。例如,如果我想生成一个关于参与某个事件的用户和团队的报告,则需要许多请求。这类似于运行多个select查询,而不是对DB运行单个join查询。所以我的问题是,我应该在资源请求中扩展关系并嵌入相关资源吗?这也带来了问题b/c上面的请求将返回大量数据。答案可能是坚持使用关系链接并设置适当的缓存。不管怎样,我想听听你的意见

Schema

events
    hasMany registrations
    hasMany tickets
    hasMany teams

team
    belongsTo event

ticket
    belongsTo event
    hasMany registrations

user
    hasMany registrations

registrations
    belongsTo event
    belongsTo ticket
    belongsTo user
    belongsTo team

在另一个请求的主体中返回资源的完整表示并没有错。正如您所提到的,这可能是冗长的

考虑到服务的某些呼叫者可能只希望返回URI,但有时您希望减少网络上的往返次数,即,您希望所有内容都在一次呼叫中,因此您正在搜索的术语是“预测”

这些是满足客户需求的资源的不同表示形式

您可以在URI参数中指定这些参数,例如,
GET/Events/1?venueProjection=full,teamProjection=URI

然后根据客户的要求返回投影

"links": {
"Venue": {
    "uri": "/Venues/1",
    "attr1": "value1",
    "attrN": "valueN"
},
"Tickets": "/Tickets?event_id=1",
"Teams": "/Teams?event_id=1",
"Registrations": "/Registrations?event_id=1"
}
注意:始终将URI与您的投影一起返回,这样,如果它们未满,客户端以后可以轻松访问完整的资源


我建议你阅读一下谷歌的“rest投影”,或者看看RESTful食谱。

谢谢。我无法告诉您我在网上阅读了多少指南/教程,但从未遇到过此术语或概念。找不到有关此术语的任何内容…:顺便说一句,门票、球队、注册应该是具有单个url属性的对象,而不是字符串。通过这种方式与客户一起处理它们更容易……我是从RESTFul食谱中得到的。它基本上是微调“表示”的另一种方式,而不使用正常的内容协商或拥有数千个表示。它允许您为所需的表示定义一个规范。