2017-04-11 30 views
-3

我需要通过web api将实体(例如产品数据)从本地系统公开给外部客户端。实体字段名称&格式在两个系统中是不同的,例如类别需求映射到ProductCategroy,类似的日期格式也可能会有所不同。在字段格式周围还可能存在其他业务规则。如何设计web api中两个不同系统之间的映射实体

而不是使用像Automapper这样的映射工具映射代码中的字段,或者开发自定义映射器我想使用配置文件,以便在添加/更新字段后不必重新编译。

例如我们要暴露一个人的实体,字段名如下

Person 
NationalityIsoCode <--Will need mapped to--> NATIONALITY 
BirthDate <--Will need mapped to--> DATEOFBIRTH 
IsPersonDisabled <--Will need mapped to--> DISABLED 
StartDate <--Will need mapped to--> DATEFROM 

这可以在automapper可以非常容易地处理不同。我们遇到的问题是,如果需要添加/删除/外部暴露新字段,则必须在添加该属性后重新编译代码。我希望这些属性可以配置以避免重新编译。

任何人都可以建议任何工具/例子或方法,可能有助于发展呢? 谢谢

+2

目前尚不清楚您的实体如何在本地系统内被分散,以便理论上避免在向某个实体添加字段时重新编译Web服务。在不知道映射的“源格式”的情况下,很难提出任何建议。 – SergGr

+0

客户端向我们的API请求数据,这些数据存储在sql server中并通过服务端点公开。我们的中间件API从客户端收到此请求并调用内部端点。收到数据后,像“Product”这样的商业模型对象暂时保存这些数据。然后,服务层根据模型中各个字段的业务规则转换此数据。一旦转换,数据就会传回。我在上面描述了一个具有不同字段名称的Person实体 – rumi

+0

看看[这篇文章](https://lostechies.com/jimmybogard/2011/02/09/autoprojecting-linq-queries/)。他们使用表达式树将查询投影到其他类,检查属性名称。使用更具体的:MemberInit。你可以编辑它,从你的xml加载源和目标属性的配置。如果你愿意,我可以发表一个你想要的完整的例子。 –

回答

-1

APIs创建两个系统会合的端点。映射发生在消费者一方。您的系统API应该交付本机标记的数据。然后,连接的API有映射的负担。关键是要消除依赖关系,而不是把它们混合在一起。

如果您正在编写这两个API,请将映射放在合作伙伴端 - 主API应始终保持原生状态,以便其他API可以连接。

请参阅:分离关注点。

相关问题