【问题标题】:How to replace session with stateless rest apis?如何用无状态的rest api替换会话?
【发布时间】:2016-01-18 15:09:12
【问题描述】:

因此,我正在尝试在 rest 框架上创建一个购物车 Web 架构,我正在努力使用浏览器存储作为维护状态的替代方案。

我尝试了 window.localStorage 和 window.sessionStorage() API,但在 Safari 和 Opera 的隐私浏览模式下失败了。

那么任何人都可以帮助找出我可以在基于休息的架构中维护状态的其他方法吗?

【问题讨论】:

    标签: api rest session cookies web-storage


    【解决方案1】:

    您不需要会话来存储应用程序状态。用户资源。

    方法是将每个购物车建模为具有唯一 ID 的资源:

    /shop/shoppingcarts/E73AC56C-BDF7-11E5-81F1-8E2EDB915C80
    

    浏览器中的客户端应用程序会读取此资源:

    GET /shop/shoppingcarts/E73AC56C-BDF7-11E5-81F1-8E2EDB915C80
    

    它会将商品添加到购物车:

    POST /shop/shoppingcarts/E73AC56C-BDF7-11E5-81F1-8E2EDB915C80/items
    
    {
      "itemId": "1234",
      "quantity": 1
    }
    

    它会列出购物车的内容:

    GET /shop/shoppingcarts/E73AC56C-BDF7-11E5-81F1-8E2EDB915C80/items
    
    [
      {
        "itemId": "1234",
        "title": "Some nice item",
        "quantity": 1,
        "price", 12.34,
        "priceTotal": 12.34
      },
      {
        "itemId": "9876",
        "title": "Some other nice item",
        "quantity": 2,
        "price", 0.99,
        "priceTotal": 1.98
      }
    ]
    

    Web 应用程序将从购物车中删除一个商品:

    DELETE /shop/shoppingcarts/E73AC56C-BDF7-11E5-81F1-8E2EDB915C80/items/9876
    

    我想你明白了。

    【讨论】:

    • 我在哪里存储 ID?在缓存中?
    • @phantophoenix 这取决于。每个用户都有自己的购物车吗?如果是这样,请将用户资源中的链接添加到他们的购物车。如果你愿意,我想你可以在本地缓存它。
    猜你喜欢
    • 2018-04-17
    • 2011-04-21
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2011-03-31
    相关资源
    最近更新 更多