我know how mythz generally feels about HATEOAS,但是我要说我必须遵循我的REST服务中的HATEOAS原则,并将链接(“自我”,“父”和其他可能的关系)添加到我的DTO。
“self”和“parent”之类的链接包含资源的路径,这些路径当然与我的路径相关。
我正在为ServiceStack REST服务使用以下项目/部署结构。如果这很重要,我正在使用 ServiceStack 3.9.71 。
服务网关汇编:
服务实施大会:
服务接口组装:
在哪里可以将链接信息添加到我的DTO?
选项1:
在我的服务网关中,当我自己构建DTO时。这似乎合乎逻辑: 我知道我需要了解的关于我的域对象的内容,我可以轻松地完成 建立链接。除了我的DTO现在都包括一个 额外的成员(链接)和建立这些链接迫使我 明确地提供路径/路由(即硬编码)。似乎领先 维持噩梦。
选项2:
在我的服务接口程序集中,我有请求上下文和 我知道我的路线。我可以封装我的服务实现 返回包含响应和链接的元对象 采集。但是,为了构建链接集合,我有时需要 域上可用的信息(即服务实施) 水平。对我来说,最大的“骗局”是它创造了一个新的附加 在我的所有回复中都是人为的。可以被视为一种方式 标准化响应格式,但我不喜欢它。
选项3:
我希望我能写一个包装器,一般“注入”一个“链接”成员到所有的DTO 我在服务接口程序集中通过挂钩进入ServiceStack返回。我没有 在那个方向上调查很多,因为我觉得我可能错了 这里的整个方法。
任何建议/建议欢迎。谢谢大家。
答案 0 :(得分:2)
我不确定如果我建议你选项1或选项3,但这是我在尝试做同样的事情后出来的。
我是从this answer开始的。
现在you can access route metadata directly from filters。
所以我目前的做法是:
=>服务创建dto响应以及将附加到响应的下一个超媒体链接集合。在这个级别,您可以按类型了解“操作”,但不知道您将如何构建路径。我认为域级处理操作工作流程是一致的。
=>在响应过滤器中,我从Metadata获取可用路由,并按照惯例从dto属性构建路由。最后路由被添加到http标头。
注意事项: 我正在绘制1 dto - 1路线。在其他情况下,这种方法可能会更加困难。