基于If-Modified-Since头修改RESTAPI表示是否有效?
我想在我的API中实现“更改值”功能。例如,假设我有以下REST API调用:基于If-Modified-Since头修改RESTAPI表示是否有效?,rest,if-modified-since,Rest,If Modified Since,我想在我的API中实现“更改值”功能。例如,假设我有以下REST API调用: GET /ws/school/7/student 这让学校里所有的学生都兴奋不已。不幸的是,这可能是很多。所以,我想修改API,只返回自某个时间以来修改过的学生记录。(用例是一个夜间进程从另一个系统运行,将所有学生从我的系统拉到他们的系统。) 我看到建议使用if-modified-since标题并返回如下表示: 在if modified-since标题中搜索自请求时间以来更新的所有学员 如果有的话,给那些学生一个
GET /ws/school/7/student
这让学校里所有的学生都兴奋不已。不幸的是,这可能是很多。所以,我想修改API,只返回自某个时间以来修改过的学生记录。(用例是一个夜间进程从另一个系统运行,将所有学生从我的系统拉到他们的系统。)
我看到建议使用if-modified-since标题并返回如下表示:
- 在if modified-since标题中搜索自请求时间以来更新的所有学员
- 如果有的话,给那些学生一个200 OK
- 如果没有从该查询返回学生,则返回一个未修改的值
- 这是标题的正确用法吗
- 如果不是(我怀疑不是),最佳实践是什么?查询字符串参数
If-Modified-Since
头是HTTP客户端(浏览器或代码)在请求资源时可以选择性地提供给服务器的头。如果提供,其含义是“我想要资源X,但仅当它自时间T以来发生了更改。”其目的是允许客户端缓存资源
您建议使用的语义是“我希望更新自时间T以来发生的集合X”。这是对X子集的请求。您的动机似乎不是启用缓存。您的客户端缓存表示似乎包含X的所有内容,即使典型的请求只会返回对X的一小部分更改;也就是说,响应不是直接缓存的响应,因此缓存需要在自定义用户逻辑客户端中进行
查询字符串参数是更合适的解决方案。下面的{seq}
类似于序列号或时间戳
GET /ws/schools/7/students/updates?since={seq}
服务器端我想您从系统开始就有一系列的更新,上面表单的请求将获取序列值大于
{seq}
的前N个更新。通过这种方式,如果客户远远落后,需要迎头赶上,结果将被分页。感谢您的确认,bass man。这也正是我的想法。