我正在努力将动作链接到我的资源以实现HATEOAS。
我想基于现有资源创建新资源,并且仍然实现完善的超媒体策略。在我的例子中,在通用服务器端作业队列上追加现有的测试请求。
我执行此操作的当前流程(为简化起见而简化)不使用超媒体来链接实际排队test_request的操作(在作业集合上创建作业资源)。
创建test_request资源
POST http://example.org/api/v1/test_request
{
'name': 'Some example tests',
'test': 'test1'
}
201, CREATED
{
'id': 3
'name': 'Some example tests',
'test': 'test1',
'links': [
{
'rel': 'self',
'href': 'http://example.org/api/v1/test_request/3',
'method': 'GET',
},
{
'rel': 'remove',
'href': 'http://example.org/api/v1/test_request/3',
'method': 'DELETE',
}]
}
生成职位资源
POST http://example.org/api/v1/jobs
{
'type': 'test_request',
'id': 3
}
201, CREATED
{
'id': 12,
'type': 'test_request',
'status': 'new',
'links': [
{
'rel': 'self',
'href': 'http://example.org/api/v1/jobs/12',
'method': 'GET',
},
{
'rel': 'remove',
'href': 'http://example.org/api/v1/jobs/12',
'method': 'DELETE',
}]
}
要在我的REST API上实现超媒体标准,我真的很想在test_request
资源上添加一个操作链接,以便为它创建一个新的作业资源。
修改了test_request表示
{
'id': 3
'name': 'Some example tests',
'test': 'test1',
'links': [
{
'rel': 'self',
'href': 'http://example.org/api/v1/test_request/3',
'method': 'GET',
},
{
'rel': 'remove',
'href': 'http://example.org/api/v1/test_request/3',
'method': 'DELETE',
},
{
'rel': 'http://example.org/rels/queue',
'href': 'http://example.org/api/v1/test_request/3/queue',
'method': 'PUT',
}]
}
所以,第一个例子是(希望)RESTful是我的第二个方法,队列动作可能更不可靠。但是,在test_request
表示中有一个明确说明要进行下一次转换的动作的链接真的很不错。
这里的最佳做法是什么?
答案 0 :(得分:0)
你的问题不是很清楚,所以我会解释你所提出的问题,也许这有助于得到答案。
根问题是一个域名问题,只有你才能真正回答。可以而且应该在不参加工作的情况下进行测试吗?您需要仔细考虑用例并做出决定。如果测试是一个弱实体,那么你应该只允许通过工作创建。
关于您对RESTful架构的努力。我建议从API中删除id字段的概念。自我链接是ID。创建作业时,您可以提供要包含在作业中的测试的链接集合。像
这样的东西POST http://example.org/api/v1/jobs
{
'type': 'test_request',
'links': [
{
rel : "test",
href : "http://example.org/api/v1/test_request/3",
},
{
rel : "test",
href : "http://example.org/api/v1/test_request/4",
}
]
}
注意:我不确定你的超文本格式如何处理同一关系的多个链接...我猜了。
我认为主键和外键不应该存在于RESTful API中。应始终使用链接。