用于删除所有项的Restful方式

用于删除所有项的Restful方式,rest,api-design,Rest,Api Design,我正在为域管理员设计一个API来管理用户cookie会话,特别是 GET users/{userKey}/sessions获取用户所有会话的列表 DELETE users/{userKey}/sessions/{sessionId}删除用户的特定会话 我想公开管理员删除(重置)用户所有会话的另一种方法。我正在考虑两个选择,我想知道哪一个更安静 DELETE users/{userKey}/sessions-{sessionId}留空可删除所有会话 POST users/{userKey}/ses

我正在为域管理员设计一个API来管理用户cookie会话,特别是

GET users/{userKey}/sessions
获取用户所有会话的列表
DELETE users/{userKey}/sessions/{sessionId}
删除用户的特定会话

我想公开管理员删除(重置)用户所有会话的另一种方法。我正在考虑两个选择,我想知道哪一个更安静

  • DELETE users/{userKey}/sessions
    -{sessionId}留空可删除所有会话
  • POST users/{userKey}/sessions/reset

  • 这个答案可能是基于观点的,所以就这么认为吧。 如果您要删除资源(因为您将要删除会话),我将使用删除资源


    如果您保留会话(但在这些资源中更改一些数据,如滑动过期),那么我会考虑使用<强>补丁<强>,因为您是<>强>修改< /强>(重置和不替换)现有会话。

    这个答案可能是基于意见的,所以就这样做。 如果您要删除资源(因为您将要删除会话),我将使用删除资源


    如果您保留会话(但在这些资源中更改一些数据,例如滑动过期),那么我会考虑使用<强>补丁<强>,因为您是<强>修改< /强>(重置和不替换)现有会话。

    REST从未被设计用于大容量事务支持,而是用于表示单个对象的状态。也就是说,API设计非常固执己见,您必须平衡REST的“纯粹性”和功能性。如果我设计这个,我会选择选项1并在“会话”端点使用delete,因为您将删除所有用户会话,而不仅仅是单个会话或子集。

    REST从来不是为批量事务支持而设计的,它用于表示单个对象的状态。也就是说,API设计非常固执己见,您必须平衡REST的“纯粹性”和功能性。如果我设计这个,我会选择选项1并在“会话”端点使用delete,因为您正在删除所有用户会话,而不仅仅是单个或子集。

    我会选择
    delete@users/sessions

    仔细想想,重置就是管理员删除会话。用户返回时/如果返回,将获得新会话。因此,重置路由没有多大意义,因为在此操作中,您没有向所有用户重新发出会话


    我的首选是
    users/sessions
    ,而不是
    users/{*}/sessions
    。后面的路线表明您希望删除父资源的所有会话,在本例中是单个用户。

    我将使用
    DELETE@users/sessions

    仔细想想,重置就是管理员删除会话。用户返回时/如果返回,将获得新会话。因此,重置路由没有多大意义,因为在此操作中,您没有向所有用户重新发出会话

    我的首选是
    users/sessions
    ,而不是
    users/{*}/sessions
    。后面的路径表明您希望删除父资源的所有会话,在本例中是单个用户

    我想公开管理员删除(重置)用户所有会话的另一种方法。我正在考虑两个选择,我想知道哪一个更安静

    你可能想使用

    POST在HTTP中有许多有用的用途,包括“此操作不值得标准化”的一般用途

    HTTP删除通常不是正确的答案

    相对较少的资源允许使用DELETE方法——它的主要用途是用于远程创作环境,在远程创作环境中,用户对其效果有一定的指导

    HTTP方法属于“通过网络传输文档”域,而不是您的域

    REST实际上并不关心目标uri的拼写——这是问题的一部分。通用HTTP组件不假定uri中编码了任何特定的语义。它只是一个不透明的标识符

    这意味着您可以应用任何您喜欢的URI设计启发。这很像在通用编程语言中为变量或名称空间选择名称;编译器/解释器通常不关心符号是否“意味着”任何东西。我们选择的名称使与代码交互的人更容易理解

    URI也是如此。您可能希望使用与API中的其他标识符一致的拼写,以便看起来API是由“一个头脑”设计的

    一种常见的方法是从资源是可以命名为()的任何信息这一概念开始的。因此,我们的工作是首先(a)找出处理该请求的资源的名称,然后(b)找出一个“匹配”该名称的标识符。资源与文档非常相似,因此,如果您能想到要在其中编写此消息的文档的名称,那么您就可以很好地找到名称(例如:我们将过期会话写入“安全日志”或“会话日志”。很好,现在请找出相应的URI。)

    如果我经营动物园:我想

    GET /users/{userKey}/sessions
    
    可能会返回用户cookie会话的表示形式。因为当我们删除所有用户会话时,这种表示会发生变化,所以我想将删除请求发布到这个相同的目标URI

    POST /users/{userKey}/sessions
    
    因为这样做会让故事更简单

    我想公开管理员删除(重置)用户所有会话的另一种方法。我正在考虑两个选择,我想知道哪一个更安静

    你可能想使用

    POST在HTTP中有许多有用的用途,包括“此操作”的一般用途