RESTFul HATEOAS API中的HTTP POST请求

问题描述 投票:10回答:1

我正在编写一个RESTful HATEOAS API。 我有复合实体,我必须GET,POST和PUT。 GET部分很简单,并且有很多例子。 响应包含实体的原始属性以及指向嵌套实体的链接。 例如:

{
 "id":"2",
 "firstName":"Brad",
 "lastName":"Pitt",
 "balance":1234.5,
 "transactions":"http://localhost:8080/jersey-poc/api/v1.1/account/1/transactions",
 "self":"http://localhost:8080/api/v1.1/account/1",
 "accountType":"http://localhost:8080/api/v1.1/account/1/accountType"
}

当我想创建或修改帐户时出现问题。 我需要将帐户与accountType相关联。 我可以发送一个POST请求,如下所示: {"firstName":"Michael","lastName":"Jackson","balance":300.0,"accountTypeId":5}
但这会破坏HATEOAS范式。 POST / PUT复合实体的最佳做法是什么?

rest hateoas
1个回答
3
投票

没有什么特别的有效载荷会对抗HATEOAS; 唯一真正的问题是accountTypeId不是很accountTypeId被发现。 (将魔术ID映射到简短的描述性字符串总是更好;将它们视为枚举。)在处理HATEOAS模型时要记住的一个关键事项是用户POST的实体不需要是正是创建资源的实体; 你可以修改它,注释它,翻译它。 它在概念上应该仍然是相同的,但这与完全相同是完全不同的。 (添加ID和创建时间戳将是扩展如何完全合理的极好例子。)

对我来说,你真正的问题是你需要重新考虑客户在POST时应该提交什么信息,以及你打算如何告诉客户他们应该在POST时提交这些信息。 我自己,我非常喜欢在这里使用XML进行上传,因为我可以很容易地告诉客户端他们的POST有效负载应该符合特定的模式(并且XML Schema和RELAX NG都足以让我描述约束)。 我敢肯定,这不是唯一的方法。

© www.soinside.com 2019 - 2024. All rights reserved.