Backbone.js restful json API design

Backbone.js restful json API design

本文关键字:API design json restful js Backbone      更新时间:2023-09-26

我在API上有以下功能,我反复地回答了几个问题:

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

  2. PUT/user(需要id,电子邮件)将激活该用户。

一旦用户激活了其帐户,就可以登录。

  1. POST/session(需要电子邮件、密码)并登录用户
  2. GET/session将查看cookie会话id,并在auth的情况下返回用户信息
  3. DELETE/session将用户注销

一旦用户登录,他会被要求提交他们的兴趣(只是一个HTML文本区域),他们也可以提交关于他们账户的描述(位置、性别等,但这都是可选的,所以HTML文本区域也可以像Twitter账户描述一样)

现在我的问题是:

如你所见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
  });
}

感谢您的阅读。

RESTful世界的经验法则是:

动词向下,名词向上。

这是因为魔法4[GET, POST, PUT, DELETE]应该足够用于所有操作:周围没有/users/activate//user/edit的东西。

虽然在整个/users上生成PUT以进行激活似乎是合法的,但向/root发出所有请求并传递"entity=users,id=3,…"等等也是合法的

我建议您对集合使用/entityname[可以使用POST创建新集合],然后使用/entityname/:id以引用单个实体[在本例中为单个用户]。

现在,您可以在/users/123上制作一个PUT来完成您需要的任何任务。


当然你可以嵌套资源:

/users/:id/interests

这是:id-th用户所有兴趣的路由-您可以通过它发出GET来检索所有兴趣,或者发出POST来向列表中添加元素,发出PUT来从头开始设置列表中的all


关于session资源的最后一个想法是:一个真正的RESTful服务应该是*无状态,即它不应该依赖于会话。每个请求都必须进行授权,请参阅HTTP基本身份验证,不过有时也可以附带会话。

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