2012-01-16 6 views
8

현재 두 버전으로 나뉘어져있는 WCF 웹 API가 있습니다. 첫 번째 버전은 api.mysite.com에서 실행됩니다. 두 번째는 현재 제작에 게시되지 않습니다.WCF 웹 API의 가장 좋은 방법은 무엇입니까?

첫 번째 버전에 대한 요청이 중단되지 않도록 두 번째 API를 게시하는 방법을 원합니다. 내 생각은 x-api-version 헤더를 추가하고 요청 된 API에 요청을 내부적으로 라우팅하는 것입니다. 어떤 헤더가없는 경우, 다음 버전 내가 버전을 구분하는 경로의 시작 부분에 /v1 또는 /v2를 추가 고려 1. 기본적으로 같은 v1 또는 v2로 요청이처럼 보일 수도 :

http://api.mysite.com/v1/authentication/login 
http://api.mysite.com/v2/auth/login 

주의해야 할 점 버전이없는 요청이 작동해야하며 버전 1 (또는 내가 지정한 버전)이 기본값이어야합니다.

비록 이것이 나에게 좋은 것처럼 들리지만, 이것을 구현하는 데 권장되는 방법이 무엇인지 잘 모르겠습니다. 나는 항상 일종의 리버스 프록시를 할 수 있다는 것을 알고 있지만, 내 솔루션이 프로그램적인 것이 될 수 있기를 바라고있다. 서버 측에서 필요한 구성이 적 으면 적을수록 좋습니다. 누구든지 아이디어가 있거나 블로그/자습서에 대한 링크가 있다면 환상적 일 것입니다.

미리 감사드립니다.

+0

Google이 ** v = 1.0 ** http : //ajax.googleapis.com/ajax/services/search/web? v = 1.0 & rsz = 8 & q = stackoverflow'를 수행하는 방법입니다. –

+0

'버전 헤더'와 '버전 URI'를 비슷한 방식으로 사용하고 있습니다. URI에 넣으면 개발자에게 매우 도움이됩니다. 브라우저를 통해 서비스를 실험해볼 수 있습니다. 또한 현재 '활성'버전으로 리디렉션되는 '무 버전 URI'를 지원합니다 (일반적으로 최신 버전이지만 새 버전을 준비하지만 공개적으로 활성화하지 않는 시나리오가있을 수 있습니다). 그것은 당신의 기준에 달려 있습니다. – Adam

+0

구현 세부 사항을 살펴본 후 기술적 인 편의로 인해 URI 접근 방식에 더 신경 써야한다고 생각합니다.그러나 현재 API의 클라이언트를 손상시키지 않는 원래 요구 사항을 충족하면서이 접근 방식을 사용할 수 있다고 생각합니다. –

답변

1

확인 WCF와 버전에 괜찮은 기사를 가지고, 내가 지금까지받은 답변을 즐길 꽤 내 문제는 제약과 목표를 부여가 해결되지 않는, (여러분 모두 감사합니다)하지만, API를 가지고 있습니다. 그래서 내가 찾은 솔루션을 상세히 설명하고 싶었습니다.

시작하려면 URI를 통해 API를 버전 관리하고 있습니다.

http://api.mysite.com/authentication/login 
http://api.mysite.com/v1/authentication/login 
http://api.mysite.com/v2/auth/login 
http://api.mysite.com/v3/auth/letmeinplease 
... you get the point ... 

여기서 주목해야 할 중요한 것은 내가 버전 번호를 포함하지 않는 경우, 나는이 내 현재의 것입니다 버전 1. 기본이다 :이 API의 다양한 버전이 어떻게 것을 의미하는 것입니다 그러나 최신 버전, 최신 안정 버전 등을 쉽게 기본값으로 설정할 수 있습니다.

여기 있습니다. 응용 프로그램이 살 수있는 폴더를 만들었습니다 (wwroot/api). 이 폴더에서 v1, v2 등 모든 버전의 폴더를 만들었습니다. 이제 IIS (7.5)에서 응용 프로그램 루트가 wwroot/api/v1 인 새 프로젝트를 만들었습니다. 그런 다음 각 버전 폴더 (v1 포함)를 하위 응용 프로그램으로 추가했습니다. 이것으로 URI를 통해 API를 버전화할 수 있지만 (위 참조)주의 할 점이 있습니다.

Web.config 상속은 정말 고통 스러울 수 있습니다. 그래서 모든 API 버전에서이 기능을 사용하지 않도록 설정했습니다. 이를 수행하는 방법에 대한 참조는 here입니다. 예외가 있으면 모든 것이 매력처럼 작동합니다! :-)

5

Microsoft는 here

+0

이것은 버전 관리를위한 훌륭한 기사입니다. 그러나 내 API에 대한 목표를 달성하지 못한다고 생각합니다. Erno의 대답에 대한 언급에서 언급했듯이 API를 직관적으로 원합니다. 특정 버전의 특정 서비스 및/또는 계약을 클라이언트가 볼 수있는 방식으로 유지하려고합니다. 클라이언트에게 전체적으로 API의 버전 관리 만 표시되도록하고 싶습니다. –

관련 문제