2013-01-25 4 views
1

우리는 API 코드에 대한 버전 시스템을 구현할 예정이며, 시스템은 sinatra를 기반으로하며 기본 API 버전이있을 것이며 클라이언트는 HTTP 수락 헤더를 추가하는 특정 버전을 선택할 수 있습니다.모델에서 API 버전을 알고 있어야합니까?

이제 API 버전 정보를 컨트롤러에 그대로 유지하거나 API 버전을 어떤 방식 으로든 모델 내부로 전달할 수 있는지 알고 싶습니다. 컨트롤러에 그대로두면 모델에서 API 버전을 전파 할 때의 단점은 무엇입니까?

+0

어떤 이점이 있습니까? 이 방법이 도움이 될지 모르겠다 - API에 대한 통합 테스트를 실행하는 경우 (모델을 조롱하지 않아도된다!), 필요가 무엇인지를 전달한다. 모델이 API를 지원하거나 지원하지 않습니다. 내가 오해하지 않았다면, 니콜라스의 대답은 좋은 것입니다. – iain

답변

0

RESTful API 디자인에서는 미디어 유형을 선택하여 버전을 지정합니다. 이는 내가하려는 일이라고 생각합니다. 두 번째 단락을 올바르게 이해했다면 버전 정보가 제공된 응답 내에 있어야하는지 (예 : 문서 모델의 일부) 묻는 중입니까?

이러한 결정은 임의적이지만 메타 데이터 (예 : 버전 정보)가 손실 될 수있는 손실이 많은 시스템을 통과하는 경우 많은 형식이 버전 정보를 전달합니다. 이런 이유로 귀하의 모델에 넣을 것을 권장합니다.

+0

나는 당신이 응답에서 버전을 유지하는 것에 대해 조언 한 바를 잘 알고 있다고 생각하지만 MVC 패턴의 데이터 모델처럼 모델을 언급하고 있다고 생각한다. 아마도 :) – iain

+0

이 디스크/소켓에 쓰여지므로 똑같습니다. 그렇지 않습니까? –

+0

응답은 모델의 표현을 어느 정도 포함 할지라도 HTTP 응답과 모델 (MVC에서)은 같지 않다고 생각 하겠지만, (나를 위해) OP가 자신이 무엇을 표현했는지 명확히해야한다고 생각합니다. 얘기하고있어. – iain

0

API를 버전 관리한다고해서 컨트롤러가 내부적으로 버전 관리를 처리 한 다음 내부적으로 버전 관리를 처리하는 모델과 통신하는 것은 아닙니다. 대신 요청시 API 버전에 따라 런타임에 스왑 인하는 컨트롤러 및 모델의 다른 버전을 가져야 함을 의미합니다.

이제 저는 Sinatra에 대해 Ruby를 사용하고 있다고 가정합니다. Sinatra 나 Ruby에 대해서는 거의 알지 못하지만, I answered a similar question for ASP.NET MVC 4 그리고 Sebastiaan Dammann이 작성한 버전 프레임 워크에 대해 논의했습니다.

비슷한 프레임 워크가 이미 Ruby에 존재하는지 확인해보십시오.

관련 문제