2013-01-25 2 views
0

저는 ASP.NET WebAPI를 사용하여 RESTful API를 작성하고 있으며 다른 API 버전을 지원해야합니다. URL (api/v1/style) 또는 사용자 정의 HTTP 헤더를 기반으로 컨트롤러 선택을 구현하는 방법을 알고 있습니다. 이 방법을 사용하면 서로 다른 API 버전의 서로 다른 네임 스페이스에 서로 다른 컨트롤러를 갖게 될 것입니다. 그러나 나는 생각할 또 다른 문제가있다. 내 모델이 v1과 v2 사이에서 변경되면 어떻게 될까요? v1 API가 직렬화 된 출력을 변경하지 못하게하려면 어떻게해야합니까? Entity Framework Code First 접근법을 사용하기 때문에 모델 변경은 쉽게 구현할 수 있지만 내 v1 API가 손상 될 수 있습니다. 각 API 버전의 일관성을 유지하는 최선의 방법은 무엇입니까?버전 관리 WebAPI - 모델 변경

답변

2

Entity Framework와 관련이 없습니다. EF 모델을 직접 직렬화하지 않기를 바랍니다. 그렇게한다면 정말로 문제가 생깁니다.

대신보기 모델을 사용해야합니다. 이러한 뷰 모델은 컨트롤러 버전 관리와 동일한 방식으로 버전을 지정할 수 있습니다. 당신은 contollers의 다른 버전에 대한 서로 다른보기 모델을해야합니다.

이렇게하면 전선을 통해 직렬화되는 것을 완벽하게 제어 할 수 있습니다. 이제 EF 모델을 원하는만큼 내부적으로 변경할 수 있습니다. 그리고 언젠가는 EF를 떨어 뜨리기로 결정할 수도 있습니다 (블록에 새로운 아이가있을 수도 있습니다). 그리고 완전히 다른 것으로 교체하십시오.이 변경 사항은 웹 API 전체에 반영되지 않으며 노출되는 것은 무엇입니까? 외부는 간단히보기 모델을 노출하고 있기 때문입니다.

+0

그냥 POCO 클래스 인 EF 모델을 직렬화합니다. 최대 절전 모드로 전환 할 때 이러한 클래스를 사용할 수 있습니다. 예를 들어, 일부 매핑을 연결해야합니다. –

+0

http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-with-entity-framework/using-web-api-with-entity-framework,-part- 1 이 자습서에서도 문제가없는 것 같습니다. –

+0

그렇습니다. API를 사용하기 때문에 모든 클라이언트를 무력화시키고있는 엔티티에 손을 대는 순간은 예외입니다. 그리고 그것이 바로 당신이이 질문을 한 이유입니다. 내 대답은 매우 간단합니다 : ** 결코 도메인 엔티티를 직렬화하지 마십시오 **. ** 항상 **보기 모델을 사용하십시오. 여기에서 링크하는 자습서는 웹 API를 시작하는 방법에 대한 기본 예제 일뿐입니다. 실제 응용 프로그램을 디자인 할 때는 고려해야 할 사항이 많으며 * 시작하기 * 자습서에서 다룰 내용이 많습니다. 그 중 하나가 버전 관리입니다. –