2013-01-17 130 views
1

我真的想利用servicestack的服务,我需要写,但我打一个心理障碍包裹我的脑海里围绕它是如何工作的,更确切地说我怎么可以使它为我的意图和目的而工作。我没有强大的asp背景,主要是后端,所以也许这就是为什么心理障碍。ServiceStack服务

我有一个传统的平台,我通过本机C++ API连接。我已经将cli中的本地api作为.net类库进行了扭曲,这将与我在样本中注入的Todo repo相当。

来回移动的数据在类lib中暴露为值结构。例如帐户将被定义是这样的:

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

订单将是这样的:

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

的lib中暴露了很多功能和操作的定义类似于上述各种不同的物体。我想了解的是:

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

2)有没有一种方法来管理框架后端的生命周期。我可以使它成为所有连接的单身人士吗?

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

4)我绝对要创建每个数据的业务类型,所以在上面的结构,我将不得不实施订单一个服务,一个用于帐目有没有办法将它们合并为一个。我喜欢ss可以转换为mq的谈话,将会使得组合服务很难在未来对mq进行操作,这种方法有什么缺点。

5)最后,我想在这,据我所知将违反合同剩下的API暴露操作。类似于:存档帐户旧时....这将是一个操作,返回成功/失败状态没有更新/删除等。实质上,通过http请求驱动一些功能。这是可能的SS,如果是这样,那么使用它以这种方式有什么衰弱的后果框架的操作...

回答

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),你可以控制由当你注册他们specifing ReuseScopes与Funq对象寿命。你会想看看

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

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

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

5)您可以轻松定义更多的路由,并且没有任何东西强制您遵守REST规则,您可以自由地按照您认为合适的方式实现HTTP动词。您可以轻松地在执行诸如存档等操作的GET上创建专用路由。这里没有任何虚弱的后果,只是可能会让API消费者感到困惑。只要确保每个人都清楚API如何与文档协同工作。