2011-03-03 49 views
1

我是新手.Net & RESTful服务。Restful Api:每个存储库方法中的用户标识?

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

的API:GET/API/NOTE/{} noteid

将被映射到存储库中调用

NoteRepository :: GetNote(用户ID,noteId)

请注意,我传递userId为了安全目的确保该笔记属于登录用户。

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

有没有更好的方法?

回答

2

由于Wikipedia REST article中描述的无状态和可缓存约束,我还会在API中引入用户标识。

但是,如果我检查Google Tasks REST API,它们不包含用户标识,对于Twitter API同样的东西,所以它似乎是一个不包含用户标识的趋势。如果有人能说出一些光,我会很感激。

UPDATE:仔细想想,如果noteid在所有用户中都是唯一的,那么不需要包含用户标识,所以GET/api/note/{noteid}很好。

然而,在一个restful接口中的逻辑父母将是GET/api/note /来获取所有笔记的列表,并且在这里我有异议,因为列表会根据用户的请求而有所不同,它不可缓存。

至于你的网点部分我觉得通过点网方法中的userid是完全没问题的。

2

您不需要用户ID,因为

GET /api/note/{noteid} 

确实是独一无二的。

用于添加ID将是有效的情景:

GET /api/{userId}/notes 

,然后如果你想要一个特定的信息,您可以:

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

我将实现在入门级的安全性。用户是否有权对该特定资源执行方法。角色模型方法会很好。

问候。

+0

嗨Udo,我同意你的观点,只要noteid在用户中是唯一的,就不需要用户ID。但是,你怎么看我的疑问。如何公开一个注释列表?逻辑将是GET/api/note /,但现在在用户中不再是唯一的。如果我们现在执行GET/api/note/,则它不再是注释请求的父级,这也是不好的。 – stivlo 2011-08-08 15:52:57

+0

@stivlo:那我最后一次编辑呢? – ssedano 2011-08-08 16:00:33

+0

是的,我认为这对我更有意义,因为它尊重了我读过的关于REST的原则。但是,正如我注意到的,Google和Twitter似乎没有这样做。 – stivlo 2011-08-08 16:06:02

相关问题