我有表日志..在该表中我有一些列,有id_log,user_role,log,timestamp,timer
user_role的类型是enum('guest','admin','moderator')
我已经有2个URI:
/logs (to represent all logs)
和
/logs/id-{number} (to represent logs with specific id_log)
我知道在URI设计中,/(斜杠)用于表示与前一个分段的层次关系中的资源。
用特定用户角色表示日志的最佳格式是什么?
/logs/{role} (using role as hierarchy)
或
/logs?roll={role} (using role as filter)
请给我一个建议
答案 0 :(得分:0)
在REST中,您需要分离资源和参数。在您的情况下,正如您正确陈述的那样,资源是一个日志并标识一个实体,因此这应该构成URL的一部分。过滤日志不是定义您获取的资源的东西,因此应该是请求的参数。
考虑一下你的表中也有一个时间戳的事实。如果用户想要通过时间戳和滚动来过滤特定日志,那么如果您尝试将所有这些信息放在URL中,那么最终会得到类似/logs/{id}/{roll}/{timestamp}
或/logs/{id}/{timestamp}/{roll}
的内容,但您是已经把自己绑在试图建立一个没有明显层次结构的规范URL的结上。将其与/logs/{id}?roll=x×tamp=y
进行比较,其中非常清楚您尝试获取的内容(单个日志)以及如何过滤它(通过滚动和时间戳)。这也允许您以各种方式更改查询参数,例如,roll
参数可能是!guest
,而不会影响资源URL。
顺便说一句,它的作用不是滚动,而是坚持在上面的解释中滚动以避免混淆。