我正在为讨论设计RESTful HTTP API。每个讨论都包含元数据和一组注释。网址可能如下所示:
/discussions/:discussionId
/discussions/:discussionId/comments/:commentId
讨论有一个修订版:如果修改了元数据,或者添加,修改或删除了评论,则会更新讨论的修订版。此外,optimistic concurrency control用于确保客户端将更新应用于最新的讨论版本。例如,
PUT /discussions/42?revision=5ac79c
只有在5ac79c
是服务器上的最新版本时才能成功。如果成功,则新的讨论修订将返回到表示中的客户端。对于非嵌套资源,可以以干净的方式处理所有操作(类似于CouchDB API)。子资源出现问题。
在创建,更新或删除评论时,如何将讨论的新版本传达给客户?
例如:请求
PUT /discussions/42/comments/23?revision=5ac79c
在表示中返回讨论的新修订版?包含父资源的状态感觉不对。
任何提示?
Bonus:也许有更好的方法来传递当前的讨论版本,而不是附加查询字符串?revision=5ac79c
?很明显,ETag
和If-Match
标头可用于指定修订版 - 但是,它们并未解决讨论修订用于评论的问题。