Backbone.js restful json API design
Backbone.js restful json API design
我在API上有以下功能,我反复地回答了几个问题:
-
POST/user(需要全名、电子邮件、密码)将创建一个新用户,如果用户已创建,则会生成一个唯一的激活ID,并通过邮件向用户发送激活帐户的链接。
-
PUT/user(需要id,电子邮件)将激活该用户。
一旦用户激活了其帐户,就可以登录。
- POST/session(需要电子邮件、密码)并登录用户
- GET/session将查看cookie会话id,并在auth的情况下返回用户信息
- 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
以进行新登录,这样您就可以跟踪用户访问。
- 如何更改bigquery API中的计费层选项
- Amazon S3 REST API大小不正确
- 客户端服务器REST API captcha实现
- 使用Facebook live API创建实时视频对象时的隐私设置
- 谷歌放置API:按国家或餐馆名称搜索餐馆
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- API密钥使用和检查示例
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- 谷歌地图JS API+JSON-多个标记没有显示
- 单击超链接时,如何使用Google Maps API v3缩放地图
- 如何在 API 调用后和 if 语句中启用提交按钮
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 搜索api在mac上显示对话框
- Backbone.js restful json API design
- 标记的实时更新,无需加载页面谷歌地图API V3
- 是否可以使用iframe API在iOS浏览器上播放youtube视频
- 对API数据使用声明性绑定
- 使用rails-api、backbone.js和design进行身份验证的请求