【问题标题】:HTTP POST requests in a RESTFul HATEOAS APIRESTFul HATEOAS API 中的 HTTP POST 请求
【发布时间】:2013-01-30 00:41:17
【问题描述】:

我正在编写一个 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】:

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

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

    【讨论】:

    • 谢谢。这就解释了。我确信请求和响应必须相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2022-12-16
    • 2015-01-26
    • 1970-01-01
    • 2021-06-25
    • 2012-02-22
    • 1970-01-01
    相关资源
    最近更新 更多