首页 > 解决方案 > 使用 http PUT 方法查询参数 - REST API

问题描述

我在我的 http PUT 方法中传递请求对象和路径变量来更新记录。与请求对象相比,是否可以将附加数据(例如时间戳)作为查询参数传递给我想要保存在具有附加字段(例如时间戳)的最终记录中?

标签: restspring-rest

解决方案


与请求对象相比,是否可以将附加数据(例如时间戳)作为查询参数传递给我想要保存在具有附加字段(例如时间戳)的最终记录中?

简短的回答:这可能并不意味着你认为它做了什么。

可以在 PUT 请求中使用查询参数吗?绝对地。查询参数只是资源标识符的另一部分。

/15f3221f-ee3b-4155-bc75-f80855a9187e/abc
/15f3221f-ee3b-4155-bc75-f80855a9187e?abc

这是两个不同的资源标识符,机器不会假设它们标识相同的资源,但是适用于一个的所有 http 方法也适用于另一个,并且意味着相同的事情。

当然没有什么神奇abc的,你可以在那里使用时间戳

/15f3221f-ee3b-4155-bc75-f80855a9187e?1970-01-01

更改时间戳会更改标识符;就通用组件而言,接下来的两个示例标识了不同的资源

/15f3221f-ee3b-4155-bc75-f80855a9187e?1970-01-01
/15f3221f-ee3b-4155-bc75-f80855a9187e?1970-01-02

您可以将它们想象为桌面日历的两个不同页面。修改 1970-01-02 文档中的约会列表根本不会更改 1970-01-01 日历。

有关表示的元数据通常嵌入在表示本身(想想 HTML 文档中的 HEAD 元素)或 HTTP 标头中。据我所知,我们没有与您想要的语义相匹配的标准化标头。

综上所述:服务器在如何解释请求以更新/15f3221f-ee3b-4155-bc75-f80855a9187e?1970-01-02. 例如,该资源的更新也可能会更新许多其他资源的表示。

(但请记住缓存 - 我们只有有限的几种方法可以告知通用客户端某些缓存表示已被请求无效。)


推荐阅读