2017-04-11 6 views
-3

web API를 통해 로컬 시스템에서 외부 클라이언트로 제품 데이터 (예 : 제품 데이터)를 노출해야합니다. 엔티티 필드 이름 인 & 형식은 두 시스템에서 모두 다릅니다. 카테고리가 ProductCategroy에 매핑되어야하므로 유사하게 날짜 형식이 달라질 수 있습니다. 필드 형식을 둘러싼 추가적인 비즈니스 규칙이있을 수도 있습니다.웹 API에서 서로 다른 두 시스템간에 매핑 엔티티를 설계하는 방법

Automapper와 같은 매핑 도구를 사용하여 코드의 필드를 매핑하거나 사용자 정의 매퍼를 개발합니다. 필자는 필드 추가/업데이트 후에 다시 컴파일 할 필요가 없도록 구성 파일을 사용하려고합니다.

우리는 person 엔티티를 노출해야합니다. 필드 이름은 다음과 같이 다릅니다.

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 

이것은 오토마터에서 매우 쉽게 처리 할 수 ​​있습니다. 우리는 새로운 필드를 추가/제거/외부 노출해야하는 경우 해당 속성을 추가 한 후 코드를 다시 컴파일해야한다는 문제가 있습니다. 재 컴파일을 피하기 위해 이러한 속성을 구성 할 수 있기를 바랍니다.

누구나이 도구를 개발하는 데 도움이 될만한 도구/예제 또는 접근법을 제안 할 수 있습니까? 감사합니다.

+2

엔티티가 로컬 시스템 내부에서 어떻게 반역하는지 명확하지 않으므로 일부 엔티티에 필드를 추가 할 때 이론적으로 웹 서비스의 재 컴파일을 피할 수 있습니다. 매핑의 "소스 형식"을 알지 못하면 제안을하기가 어렵습니다. – SergGr

+0

우리의 API에 대한 클라이언트의 데이터 요청은이 데이터가 SQL Server에 저장되고 서비스 엔드 포인트를 통해 공개됩니다. Google의 미들웨어 API는 클라이언트로부터이 요청을 받고 내부 종단점을 호출합니다. 데이터가 수신 된 후'Product'와 같은 비즈니스 모델 객체는이 데이터를 임시로 보관합니다. 그런 다음 서비스 계층은 모델의 다양한 필드 주변 비즈니스 규칙에 따라이 데이터를 변환합니다. 일단 변환되면 데이터가 다시 전달됩니다. 위에서 다른 필드 이름을 가진'Person' 엔티티를 설명했습니다. – rumi

+0

[this post] (https://lostechies.com/jimmybogard/2011/02/09/autoprojecting-linq-queries/)를보십시오. 그들은 표현 트리를 사용하여 속성 이름을 검사하는 다른 클래스에 질의를 투영합니다. 보다 구체적인 사용 : MemberInit. 그것을 편집하여 xml에서 source 및 dest 특성의 구성을로드 할 수 있습니다. 원하는 경우 원하는 wath 예제를 게시 할 수 있습니다. –

답변

-1

API 두 시스템이 만나는 지점을 만듭니다. 매핑은 소비자 측에서 발생합니다. 시스템 API는 고유 레이블 데이터를 제공해야합니다. 그런 다음 연결하는 API에 매핑 부담이 있습니다. 요점은 종속성을 제거하고 혼합으로 구워 내지 않는 것입니다.

두 API를 모두 작성하는 경우 파트너 측에 매핑을 지정하십시오. 기본 API는 다른 API가 연결할 수 있도록 항상 기본으로 유지되어야합니다.

참조 : 우려 사항 분리.