1

我真的很想将 servicestack 用于我需要编写的服务,但我遇到了一个心理障碍,我的思想围绕着它是如何工作的,更准确地说,我如何让它为我的意图和目的工作。我没有强大的asp背景,主要是后端,所以也许这就是心理障碍的原因。

我有一个遗留平台,我通过本机 c++ api 连接到该平台。我已将 cli 中的本机 api 扭曲为 .net 类库,这相当于将 Todo repo 注入样本中。

来回移动的数据在类库中作为值结构公开。例如帐户将被定义如下:

struct Account{
  int id;
  string name;
  string password;
  ...
}

订单将是这样的:

struct Order{
  int orderId;
  int account;
  string comment;
  ...
}

该库为与上述类似定义的各种不同对象公开了许多功能和操作。我想了解的是:

1)如何在容器中注册 api?更准确地说,我不明白 Register 方法如何知道它应该得到什么类型。在 todo 示例中,所有内容都在同一个程序集中定义,因此很难看到后端是如何注入的。

2)有没有办法在框架中管理后端的生命周期。我可以使它成为所有连接的单例吗?

3)我是否必须将我的结构包装在将字段映射到请求的类中。不清楚请求对象是如何定义的,似乎请求的内容应该是可以转换为操作的字段名/类型的 url 的字段。如果有一种方法不必包装,那么我该如何限制在 api 中公开哪些字段,哪些不公开。

4)我是否必须为每种数据类型创建一个服务,所以在上面的结构中,我必须为订单实现一项服务,为账户实现一项服务,有没有办法将它们组合成一个。我喜欢 ss 可以转换为通过 mq 进行通话,这会使组合服务在未来难以通过 mq 进行操作,这种方法有什么缺点。

5)最后,我想公开 api 中的操作,afaik 会违反其余合同。类似于:存档帐户,然后......这将是一个返回成功/失败状态的操作,没有更新/删除等。本质上,通过 http 请求驱动一些功能。这在 ss 中是否可能,如果可以,以这种方式使用它是否会对框架的操作产生任何破坏性后果...

4

1 回答 1

2

1) 要注册您的 API,您需要将内置 IoC 与 Funq 一起使用。

container.Register(c => new LegacyApiService())
       .ReusedWithin(ReuseScope.Container); 

Funq 能够在您的 API 服务中自动连接这些服务。看看https://github.com/ServiceStack/ServiceStack/wiki/The-IoC-container

您还可以使用 TryResolve 方法解析任何可用容器。

2)您可以通过在注册时指定 ReuseScopes 来使用 Funq 控制对象的生命周期。你会想看看

ReuseScope.Container: Singleton scope 
// a instance is used per application lifetime

3)您将需要为您的结构创建计划旧类(DTO)。这对于 ServiceStack 是必需的。您的所有 DTO 公共属性都将被序列化。您还可以选择使用 DataMemberAttribute 和 IgnoreDataMemberAttribute 来控制要序列化的公共属性。

4) 每个请求 DTO 都需要一个服务。但是,您可以将此代码保持在最低限度并调用集中式业务层。这是必要的,因为每个路由 + 动词都需要有不同的操作,因此每个 DTO 有一个服务类。

5) 您可以轻松定义更多路由,并且没有什么会迫使您遵守 REST 规则,您可以自由地实现您认为合适的 HTTP 动词。您可以轻松地在 GET 上创建专门的路由来执行归档等操作。这里没有使人衰弱的后果,只是可能会让您的 API 消费者感到困惑。只要确保每个人都清楚 API 如何与文档一起工作。

于 2013-01-17T14:25:29.870 回答