【问题标题】:ServiceStack request parameter or session variable?ServiceStack 请求参数或会话变量?
【发布时间】:2014-03-06 02:26:57
【问题描述】:

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

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

  2. 同样,我是否应该将我的路由从 /user/15 重构为 /company/1/user/15

这可能更像是一个一般性的 REST 问题,但很好奇是否有特定于 ServiceStack 的解决方案/建议。

【问题讨论】:

    标签: c# rest servicestack


    【解决方案1】:

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

    我创建了这个流程图来展示我将如何决定处理这种情况。

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

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

    请记住,stateless 意味着必须在每个请求上验证和验证 CompanyId

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

    希望这会有所帮助。

    【讨论】:

    • 这是一个很好的分析。流程图的出色补充。
    • @JeremySmith 谢谢,很高兴它有用。 :)
    【解决方案2】:

    我会说这取决于您的型号。如果您的用户链接到 single 公司,则路线可能是 /company/{id}/user{id} 。如果您想列出给定公司的所有用户,这很好。

    看到一些RESTful best practices

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      • 2019-06-09
      相关资源
      最近更新 更多