Javascript Backbone.js restful json API设计

Javascript Backbone.js restful json API设计,javascript,rest,backbone.js,Javascript,Rest,Backbone.js,我的API中有以下功能,并且我反复回答了几个问题: POST/user(需要全名、电子邮件、密码)将创建一个新用户,如果已创建该用户,将生成一个唯一的激活ID,并通过邮件将激活该帐户的链接发送给该用户 PUT/user(需要id、电子邮件)将激活该用户 一旦用户激活了自己的帐户,就可以登录了 POST/会话(需要电子邮件和密码)并登录用户 GET/session将查看cookie会话id,并在验证时返回用户信息 删除/会话将用户注销 一旦用户登录,他会被要求提交他们的兴趣(只是一个HTML文本区

我的API中有以下功能,并且我反复回答了几个问题:

  • POST/user(需要全名、电子邮件、密码)将创建一个新用户,如果已创建该用户,将生成一个唯一的激活ID,并通过邮件将激活该帐户的链接发送给该用户

  • PUT/user(需要id、电子邮件)将激活该用户

  • 一旦用户激活了自己的帐户,就可以登录了

  • POST/会话(需要电子邮件和密码)并登录用户
  • GET/session将查看cookie会话id,并在验证时返回用户信息
  • 删除/会话将用户注销
  • 一旦用户登录,他会被要求提交他们的兴趣(只是一个HTML文本区域),他们也可以提交关于他们帐户的描述(位置、性别等,但这都是可选的,所以也可以提交一个HTML文本区域,就像推特帐户描述一样)

    现在我的问题是:

    如你所见2。PUT/user将激活用户,但我如何在适当的restful设计中处理提交兴趣和帐户描述

    我是否应该在后端服务器上查看PUT/user将进入的位置,并检测提交的字段

    或者,创建一个单独的PUT/user/activate和PUT/user/interest会更有意义吗

    一旦完成,我想用恢复密码来扩展它,这将是一个PUT/用户,服务器端的现场检测不会变得有点混乱吗

    关于主干网,这是我的会话模型:

    var Session = Backbone.Model.extend({
      url: '/session'
    });
    
    var session = new Session();
    session.fetch(); // Get the user authentication of the backend server.
    
    我的用户模型:

    var User = Backbone.Model.extend({
      url: '/user'
    });
    
    function signup(fullName, email, password){
      var user = new User();
      user.save({
        fullName: fullName,
        email: email,
        password: password
      });
    };
    
    function activate(id, activationId){
      var user = new User();
      user.save({
        id: id,
        activationId: activationId
      });
    };
    
    // Possibility...?
    function submitInterests(id, interests){
      var user = new User(url: '/user/interests/');
      user.save({
        id: id,
        activationid: activationId
      });
    }
    

    感谢您的阅读。

    宁静世界的经验法则是:

    动词向下,名词向上

    这是因为魔法4[
    GET、POST、PUT、DELETE
    ]应该足以执行所有操作:无
    /users/activate
    /
    /user/edit

    当对整个
    /users
    进行
    放置
    以进行激活时,似乎是合法的,向
    /root
    发出所有请求并传递“entity=users,id=3,…”等等也是合法的

    我建议您对集合使用
    /entityname
    [在这里您可以
    发布
    来创建一个新集合],然后使用
    /entityname/:id
    来引用单个实体[在本例中,是单个用户]

    现在,您可以在
    /users/123
    上放置
    ,以完成您需要的任何操作


    当然,您可以嵌套资源:

    /users/:id/interests
    
    这是
    :id th
    用户所有兴趣的路径-您可以在上面发出
    GET
    来检索它们,或者发出
    POST
    来向列表添加元素,发出
    PUT
    来从头开始设置all列表


    关于
    会话
    资源的最后一个想法是:真正的RESTful服务应该是*无状态的,即它不应该依赖会话。必须对每个请求进行授权,请参见,尽管有时您可以参加会话


    为了与您的模式保持一致,您可以定义一个
    /user/:id/sessions
    资源,在该资源中,您可以
    POST
    进行新的登录,以便跟踪用户访问情况。

    RESTful world中的经验法则是:

    动词向下,名词向上

    这是因为魔法4[
    GET、POST、PUT、DELETE
    ]应该足以执行所有操作:无
    /users/activate
    /
    /user/edit

    当对整个
    /users
    进行
    放置
    以进行激活时,似乎是合法的,向
    /root
    发出所有请求并传递“entity=users,id=3,…”等等也是合法的

    我建议您对集合使用
    /entityname
    [在这里您可以
    发布
    来创建一个新集合],然后使用
    /entityname/:id
    来引用单个实体[在本例中,是单个用户]

    现在,您可以在
    /users/123
    上放置
    ,以完成您需要的任何操作


    当然,您可以嵌套资源:

    /users/:id/interests
    
    这是
    :id th
    用户所有兴趣的路径-您可以在上面发出
    GET
    来检索它们,或者发出
    POST
    来向列表添加元素,发出
    PUT
    来从头开始设置all列表


    关于
    会话
    资源的最后一个想法是:真正的RESTful服务应该是*无状态的,即它不应该依赖会话。必须对每个请求进行授权,请参见,尽管有时您可以参加会话


    为了与您的模式保持一致,您可以定义一个
    /user/:id/sessions
    资源,在这里您可以
    POST
    进行新的登录,这样您就可以跟踪用户访问。

    如果它是无状态的,那么我就不知道如何在我的web应用程序中管理会话。还有,为什么不使用会话并打破rest模式呢?我使用redis作为会话存储,因此它是集中式的。会话提供了用户跟踪功能,并且在每次收到请求时不再查询我的数据库(auth)。如果它是无状态的,那么我就不知道如何在我的web应用程序中管理会话。还有,为什么不使用会话并打破rest模式呢?我使用redis作为会话存储,因此它是集中式的。会话提供了用户跟踪功能,并且在每次收到请求时不再查询我的数据库(auth)。