ServiceStack请求参数或会话变量?

时间:2014-03-06 02:26:58

标签: c# rest servicestack

我正在使用ServiceStack作为REST服务层来处理典型的业务线应用程序。登录到此系统的所有用户都将与公司实体相关联。因此,Company.Id是我所有服务方法的重要参数。如果每个请求都需要信息,最好将其存储在经过身份验证的用户会话中。

  1. 我是否应该将CompanyId添加到每个请求中以使每个dto无状态?

  2. 同样,我应该重构从/user/15/company/1/user/15的路线吗?

  3. 这可能更像是一个普通的REST问题,但是如果有特定于ServiceStack的解决方案/推荐则很奇怪。

2 个答案:

答案 0 :(得分:2)

如果您的用户正在处理特定于公司的数据,那么您将需要考虑是否使用/company/{CompanyId}为路由添加前缀。正如我所看到的那样,做到这一点的决定归结为一些关于用户如何与公司或与之关联的公司进行交互的问题。

我已创建此流程图,以显示我将如何决定解决此问题。

Flow

我个人有一种情况,即用户与多家公司相关联,并选择拥有可以更改活动公司的路线,然后所有请求只是从会话中读取活动公司。这使我不得不在每个请求上验证和验证公司ID,我只是在他们更改上下文时执行一次。但是如流程图所示,如果不经常切换,这只会很好。

  

我是否应该将CompanyId添加到每个请求中以使每个dto无状态?

请注意,stateless表示必须在每次请求时验证并验证CompanyId

另一个考虑因素,如果API是公开的,并且您希望允许定位不同的公司,那么请选择路线中的CompanyId。使用您公共API的人如果忘记在后续请求之前设置正确的活动公司,则可能会出错。但是,如果API是私有的,您将处理能够在您的应用程序中设置活动的公司上下文,所以一切都应该没问题。

希望这有帮助。

答案 1 :(得分:0)

我会说这取决于你的型号。如果您的用户链接到单个公司,则路线可以是/ company / {id} / user {id}。如果您想列出给定公司的所有用户,那就太好了。

查看一些RESTful best practices