Restful Api:每个存储库方法中的用户ID?

时间:2011-03-03 08:30:16

标签: rest restful-authentication

我不熟悉.Net& RESTful服务。

以下是我在数据库中的对象层次结构:Users-> Folders-> Notes。

API:GET / api / note / {noteid}

将被映射到存储库调用

NoteRepository :: GetNote(userId,noteId)

请注意,为了安全起见,我正在传递userId以确保该笔记属于登录用户。

这是正确的做法吗?意思是,每个存储库调用都会有第一个参数作为userId来检查被访问的对象是否属于用户。

有没有更好的方法?

2 个答案:

答案 0 :(得分:2)

我还会在API中引入用户ID,因为Wikipedia REST article中描述了Stateless和Cacheable约束。

但是,如果我检查Google Tasks REST API,它们不包含用户ID,Twitter API也是如此,因此似乎不包含用户ID的趋势。如果有人能说清楚,我将不胜感激。

更新:想一想,如果noteid在所有用户中都是唯一的,则无需包含用户ID,因此GET / api / note / {noteid}就可以了。

然而,restful接口中的逻辑父级将是GET / api / note /以获取所有注释的列表,这里我有异议,因为列表会根据请求它的用户而有所不同,不可缓存。

至于你的网点部分,我认为在dot net方法中传递用户ID非常好。

答案 1 :(得分:2)

以来,您不需要用户ID
GET /api/note/{noteid}

确实是独一无二的。

添加ID的有效方案是:

GET /api/{userId}/notes

然后,如果你想要一个特定的笔记,你可以:

GET /api/{userId}/notes/{noteId}

我会在入门级实现安全性。用户是否有权在该特定资源上执行方法。角色模型方法没问题。

问候。