웹 api 버전 전략
귀하의 API 버전 관리가 잘못되었습니다. 그래서 3 가지 다른 방법으로 결정했습니다.
결국, 나는 가장 공정하고 가장 균형 잡힌 방법이 모두를 똑같이 화나게하는 것이라고 결론을 내렸다. 물론 API 버전 관리에 대해 이야기하고 있지만 대단한 & # x201C; 탭 대 스페이스 & # x201D; 논쟁은 전적으로 다른 캠프에서 그렇게 많은 강한 신념을 보았습니다.
이것은 괜찮 았어. 내가 지었을 때 나는 뽑혔다? (HIBP)는 11 월 말에 몇 사람이 사용할 수있는 간단하고 빠른 서비스를 제공하기위한 것이 었습니다. 첫 번째 두 점은 달성되었지만 마지막 두 점은 달성되지 못했다고 생각합니다. 실제로는 첫 번째 주말까지 Google 애널리틱스에서 처리 할 수있는 것 이상 이었지만 실제로는 & # x201C; 몇 & # 201D;였습니다. 요점은 API를 작성할 때 미래를 항상 예상 할 수 없으며, 어느 시점에 이미 의존하고있는 것을 변경해야 할 수도 있다는 것입니다.
하지만 문제는 & # x2013; HTTP를 통해 API와 관련된 모든 것을 이야기 할 때마다 다음과 같은 일이 발생합니다.
여러분이 돌아가는 방법마다 & # x201C; 올바른 길 & # x201D; REST에 대한 많은 후진 및 전달, RESTful 인 경우, 그렇지 않은 경우 및 문제가있는 경우에도 그렇다. API 변경, 버전 관리에 미치는 영향, 어떻게해야하는지에 대한 여러 가지 아이디어가있는 이유, 궁극적으로 실제로 실제로 일을하는 것만 큼 중요하지 않은 이유에 대해 이야기 해 보겠습니다.
더 많은 위반 데이터를 가져옵니다.
동일한 API가 사이트의 검색 기능에 사용되고 이제는 스마트 폰 앱에서 침투 테스트 도구에 이르기까지 모든 것을 만드는 외부 당사자들에 의해 사용됨에도 불구하고 위의 응답은 처음에는 훌륭하게 작동했지만 제한적이었습니다. 예를 들어 다음과 같은 응답은 효과가 없습니다.
왜? 왜냐하면 & # x201C; BattlefieldHeroes & # x201D; 는 파스칼 방식으로되어 있기 때문에 하드 코딩 된 CSS 클래스 (비록 장기간 좋은 접근법은 아닐지라도)와 일치시키고 & #C20C; 안정적인 & #C20D; 참조 할 이름 (두 번째 위반이 있어도 변경하지 않으려는 경우)이지만 제목으로 표시하기에는 적합하지 않습니다. 이 모든 것은 Azure 테이블 저장소에서 나옵니다. 그런 다음 실제로 SQL Azure로 이동하여 실제로 위반을 설명하는 관계형 데이터를 가져옵니다. 그 관계형 스토리지의 속성 중 하나는 위에서 본 이름입니다.
내가 정말로하고 싶었던 것은 이와 비슷한 것입니다.
알 겠어? 위반의 이름에 대한 이전 지점에서는 name 속성에 여전히 해당 항목이 있지만 이제는 제목도 있습니다. 이것은 사람들에게 & # x2013; & # x201C; Battlefield Heroes & # x201D; & # x2013; 더 중요한 것은 Gawker가 다시 Pawn 된 경우 Gawker2014와 같은 이름을 지정할 수 있으며 제목은 Gawker (Syrian Electronic Army Attack) & # x201D; 그것은 무엇이 안정적이고 예측 가능하지 않은지에 따라 구분되며, 이는 사람들이 name 속성에 이미지 또는 기타 자산과 같은 종속성을 생성 할 수 있음을 의미합니다.
다른 데이터는 매우 명확해야합니다 : 위반 날짜, 시스템에 추가 된 날짜, 계정 수 (pwned), 위반 설명 (다시 말하면 어구를 조정해야하는 경우 변경 될 수 있음) 및 # x201C; DataClasses & # x201D; 많은 사람들이 요구했던 사항 중 하나는 위반 사항에 대한 설명 이었으므로 위반 사항에 대한 컬렉션을 통해 추가 할 수있는 것보다 훨씬 많은 특성이 있습니다. 이미 Pwned 웹 사이트 페이지에서 각 위반 사항 아래에 이러한 내용이 표시되어 있습니다 (이것이 내가 지금 설명 중 일부를 조정할 수있는 또 다른 이유입니다).
이것은 큰 변화입니다. API의 정서는 동일하지만 & # x2013; 계정 이름을 입력하고 위반 목록을 다시 받으십시오. & # x2013; 더 이상 문자열 이름 배열이 없습니다. 이전 API를이 API로 간단히 대체하면 물건이 손상됩니다. 아피스. 절대로 필요한 것. 진화해라.
소프트웨어가 진화하면 API의 버전을 변경해야합니다.
이것에 대해 & # x2019; 그냥 맑은하자 : 세계 이동합니다. HIBP 용 API는 약 2 개월 동안 지속되었지만 잘못 설계 되었기 때문에가 아니라 서비스가 예기치 않게 성공적으로 이루어 졌기 때문에 가능합니다. 나는 이런 종류의 문제를 좋아하며 그렇게해야합니다.
이제 나는 선택의 여지가 있었다. 내가 가진 것과 함께 할 수 있고 더 나은 방법으로 사람들을 박탈 할 수 있었고, 기존의 서비스에 새로운 방식으로 추가 할 수있었습니다. 또는 새로운 버전을 만들 수도 있었지만 (다른 엔티티에 같은 엔티티를 노출 했음에도 불구하고) 빌드 할 수있었습니다. 내가 제일 잘 아는 방법. (새로운 버전을 선택하기 전까지) 올바르게 모델화 된 불필요한 바이트가 없으며 궁극적으로 소비자에게 다가 가기 위해 노력하는 엔티티를 잘 나타내줍니다. & # x2019; 앱.
API를 가장 현명한 방법으로 사용할 때 새로운 버전의 API를 도입해도 아무런 문제가 없습니다. 꼭, & # x201C; 권리 & # x201D; 1 일부터 시작하지만 예상대로 & # x201C; 오른쪽 & # x201D; 일시적인 상태입니다. 이것이 우리가 버전을 사용할 수 있어야하는 이유입니다.
다양한 버전 관리 캠프.
그렇다면이 버전 관리 사업은 얼마나 힘들 수 있습니까? 나는 그것이 간단한 운동이어야한다는 뜻인가요? 문제는 그것이 매우 철학적으로 느껴지지만, 지금은 생각해 보지 못한 채 세 가지 공통적 인 사고 방식을 실제로 구현 한 방법에 대해 설명해 드리겠습니다.
URL : API 버전을 URL로 간단히 채 웁니다. 예를 들면 다음과 같습니다. haveibeenpwned / api / v2 / breachedaccount / foo 맞춤 요청 헤더 : 이전과 같은 URL을 사용하지만 & # x201C; api-version : 2 & # x201D; 수락 헤더 : 수락 헤더를 수정하여 버전을 지정합니다 (예 : & # x201C). 수락 : application / vnd. haveibeenpwned. v2 + json & # x201D;
이것에 많은 것들이 쓰여 있었고 나는 포스트의 끝에 그것들과 링크 할 것이지만, 요약 된 버전은 다음과 같다 :
엔티티를 나타내야하기 때문에 URL이 빨라집니다. 검색하는 엔티티가 위반 된 계정이고 위반 된 계정의 버전이 아닌 한 실제로는 동의합니다. 의미 상으로는 정확하지 않지만 사용하기 쉽습니다. 사용자 정의 요청 헤더는 실제로 자원을 설명하는 의미 론적 방법이 아니기 때문에 흡인됩니다. HTTP 사양은 accept 헤더를 통해 표현 된 리소스와 같은 특성을 요청하는 수단을 제공합니다. 이? 테스트하기가 쉽지 않아서 헤더를 받아들입니다. 더 이상 URL을 제공하지 않고 & # x201C라고 말하면됩니다. 여기에서 & # x201D를 클릭하십시오. 요청을 신중하게 작성하고 accept 헤더를 적절히 구성해야합니다. .
각 접근 방식에 대한 다양한 논거는 & # x201C;에서가는 경향이 있습니다. & # x20; right & # x2019; 방법은 있지만 실용적이지는 않습니다. & # x201; through ~ & # x201C; 이것은 소모품을 만드는 가장 쉬운 방법이므로 & # x20; right & # x2019; & # x201D;가됩니다. 하이퍼 미디어, 컨텐츠 협상, & # x201C; REST & # x201D; 모든면에서 다른 이슈들. 불행하게도 이것은 매우 자주 철학적으로 이루어지며 실제로 목표가되어야하는 것, 즉 작동하는 소프트웨어, 특히 API 용 소프트웨어를 제작하여 쉽게 소모 할 수 있도록 만들어야합니다.
안정된 계약을하는 것이 어리석은 일입니다!
이 방법 또는 방법으로하는 것에 대한 모든 격동 및 격노보다 더 중요한 것은 사람들에게 안정성을 부여하는 것입니다. API를 사용하기 위해 힘들게 벌어 들인 노력을 투자하면 API를 사용하지 않는 것이 좋을 것입니다.
솔직히, & # x201C; RESTful & # x201D; 대 단어 자체가 당신의 성공을 결정할 것만 같지 않은가? 그 토론을 & # x201C;로 바꾸십시오. 여기에 실용적인 이유가 있습니다. 이 말이 어울리는 이유는 다음과 같습니다. & # x201D; 그리고 나는 모든 귀가 없습니다. 문제는 심지어 시끄러운 토론에서 이성을 표명하는 목소리가 실제로 가장 좋은 접근 방식에 대한 의문을 남기므로 나는 타협에 도달했습니다. & # x2026;
다음은 선택할 수있는 HIBP API를 사용하는 3 가지 잘못된 방법입니다.
이제 3 가지 잘못된 방법 중 하나를 선택할 수있는 선택권을 부여하고 싶지만 분명히 잘못된 결정을 내렸을 것입니다. 대기 & # x2013; 뭐?! 즉, API를 구현하면 너무 소비하기 어렵고 학문적이거나 프록시에서 실패하거나 너무 무언가가 실패 할 가능성이 높습니다. 잘못된 방법을 1 개 선택하기보다는 3 가지 방법을 모두 잘못 결정했기 때문에 가장 나쁜 점을 선택할 수 있습니다.
잘못된 방법 2 - 맞춤 요청 헤더 :
필연적으로, 누군가 3 가지 방법을 제공하는 것은 잘못된 행동이라고 나에게 말할 것이다. 유지하기 위해 더 많은 코드 덩어리를 얻지 못 했습니까? 아니요, 이는 기본 웹 API 구현이 두 가지 속성으로 장식되었음을 의미합니다.
첫 번째 것은 단순히 RouteFactoryAttribute를 구현하는 라우팅 제약 조건입니다. 나는 경로를지나 그 경로에 매핑 할 수있는 버전을 전달한 다음 구현이 & # x201C; api-version & # x201D; 헤더 또는이 패턴과 일치하는 수락 헤더 :
이 중 하나에 지정된 버전이 라우팅 제약 조건에 지정된 버전과 일치하면 호출되는 메소드가됩니다. 이것은 CodePlex에서이 샘플을 간단하게 적용한 것입니다.
위의 GetV2 메서드를 장식하는 두 번째 특성은 Web API 2와 특성 라우팅 기능에 있습니다. 물론 웹 API에서 항상 라우팅을 수행 할 수 있지만 일반적으로 전역 적으로 정의되었습니다. 이와 같은 속성 라우팅은 경로 정의가 적용되는 컨텍스트에 경로 정의를 가져오고 어떤 경로로 어떤 컨트롤러 작업이 호출되는지 쉽게 알 수 있도록합니다. 또한 API를 호출하는 3 가지 잘못된 모든 방법을 구현하여 하나의 적절한 위치에 함께 배치 할 수 있음을 의미합니다.
따라서 간단히 말해서, 이것은 많은 kludge를 생성하지 않으며 유지 보수가 매우 쉽습니다. 3 가지 방법 모두 정확히 똑같은 결과를 반환 할 것이고 무엇보다 중요한 점은 안정적인 상태로 유지 될 수 있으며 결국에는 변화가 없으며 실제로는 하루가 끝날 때 가장 많이 변하는 것입니다. 당신이 선택하는 옵션에 관계없이 중요한 것. 전체 구현은 이제 사이트의 API 페이지에서도 명확하게 설명됩니다.
하지만 버전을 지정하지 않으면 어떻게 될까요?
당신은 내가 이미 말했던 것을 알 수 있습니다. & # x2019; 예, 그렇습니다. 지금하는 일을하면 & # x2013; 버전을 지정하지 않았습니다. & # x2013; 그러면 지금 얻은 것을 얻을 수 있습니다. 즉, 특정 버전에 대한 요청이 없으면 버전 1을 얻게됩니다.
나는 기본적으로이 시점에 도달했는지에 관계없이 그 점에 대해서는 상당히 괜찮습니다. 번호가 지정되지 않은 경우 최신 버전을 반환하는 사용자가 있지만 안정적인 계약 인 & # x201D; 전체 계약을 중단하는 IMH가 있습니다. 골; 오늘 API에서 얻은 내용은 내가 수정하면 내일 얻을 수있는 것과 완전히 다를 수 있습니다. 그것은 빨고 물건을 부러 뜨릴 것입니다.
3 가지 선택 사항이 있지만 개인적인 선호도는 & # x2026;
API와 HIBP 웹 사이트 자체의 기본 소비자를 모두 제어 할 수있는 사치를 가지고 있습니다. API를 사용하기위한 3 가지 옵션이 제공되었는데, 어느 옵션을 사용합니까?
필자는 수락 헤더를 통해 철수를 지정하기로 마음 먹었습니다. 나는 이것이 옳다고 생각하지 않으며 다른 것들은 틀린 것이지, 오히려 나는 이것이 두 가지 주요한 이유 때문에 가장 합당하다고 생각한다 :
URL이 변경되지 않아야한다는 데 동의합니다. URL이 리소스를 나타내는 것으로 동의하면 다른 버전의 리소스를 나타내지 않는 한 URL을 변경하지 않아도됩니다. foo에 대한 위반은 항상 foo에 대한 위반이며 foo에 대해 반환 된 데이터가 변경되어 foo의 위치가 변경되어야한다고 생각하지 않습니다. 수락 헤더는 여러분이 데이터를 어떻게 좋아하는지 설명합니다 : 이것은 HTTP 스펙의 의미이며 요청 동사의 의미가 많은 의미를가집니다 (예 : 가져 오기 또는 삭제 또는 게시), 클라이언트가 표현한 콘텐츠를 원하는 방식도 마찬가지입니다.
결코 다른 두 가지가 잘못되어 솔직히 API를 다른 사람과 공유 할 수있는 방법이 없다는 것을 의미하는 것은 아닙니다. & # x201C; 여기에서 & # x201D;를 클릭하면 가능합니다. 요청을 쉽게 구성하고 헤더를 관리 할 수 있으므로이 경로를 따라갔습니다.
사실, 생각해 보니, 나는 또한 도메인 경로에있는 버전을 사용합니다. 왜? 이 API를 작성하는 과정에서 나는 쿼리하는 방법 (나중에 자세히 설명)과 반환하는 특성에 대해 사람들과 지속적으로 의견을 나눴다. & # x201C; 이봐, 여기 & # x2019; 생각 & # x201D; 그들은 그것을 클릭하기 만하면 결과를 얻는 것이 매우 중요합니다. URL 버저 닝 접근법을지지하는 사람들은 헤더에 의존 할 때이 작업을 수행 할 수 없습니다.
아, 그리고 저를 확인한 경우, 작성 당시에는 아직 API를 v2로 롤백하지 않았습니다. 검색이 발생했을 때 위반 데이터가 API에서 되돌아 왔으므로 초기로드시 모든 위반 사항을 소스에로드하지 않아도된다는 의미입니다 (데이터 세트가 확장됨에 따라 지속될 수 없음). 이렇게하면 여러 개의 발신 트래픽이 절약되어 사이트로드 속도 측면에서 사람들의 속도가 빨라지지만 결국에는 더 많은 작업이 필요하게됩니다. 계속 지켜봐.
끝내고.
분명히 나는 모든 것이 잘못되었지만 정직하게 여기에 대해 약간의 혀를 썼다. 더 많이 읽으면할수록 더 많은 질문이 제기 될수록 모든 경로가 어떤 방향 으로든 더 틀리게 보인다. 실제로 나는 구현의 측면이 '& # x201C; wrong & # x201D; (적어도 두세 가지로 생각할 수 있습니다.) 그리고 자연스럽게 그 영향에 대한 잠재적 인 맹공격에 대비하고 있습니다. 문제는 각각의 옵션이 솔직하게 작동한다는 것입니다. 모든 실제적인 목적을 위해 서로 잘 작동합니다.
최종 결정을 내리고 API의 버전을 지정하는 방법을 고려하는 다른 사용자를 남겨 둘 수있는 경우 : 사용자가 API를 빌드하기 전에는 아무도 API를 사용하지 않습니다. 그말 질질 끌어. 이들 중 어느 것도 & # x201C; 나쁨 & # x201D; 어떤 유형의 의미에서, 그들은 단지 다른 것입니다. 그들은 모두 쉽게 소모 할 수 있고, 모두 동일한 결과를 반환하며, 아무도 프로젝트의 성공에 실제 영향을 미치지 않습니다.
참조.
스택 오버플로 : API 버전 관리를위한 우수 사례? (위대한 질문, 위대한 답은 & # x201C로 닫았지만 건설적인 것은 아니며 & # x201C; 도마뱀을 빌려주고 # x201D; 그날 아침 침대의 반대편에 나왔다) 어휘 범위 블로그 : REST는 어때? API 버전이 있습니까? CodePlex : 라우팅 제약 조건 샘플 (사용자 정의 헤더를 추가하여 버전 관리 API의 예제로 Microsoft & # x2019;의 웹 API 페이지에서 링크 됨) CodeBetter : RESTful 버전 관리 (여러 서비스에서 버전 관리 방법을 비교해보십시오.) 서비스 (매우 실용적이고 API가 변경 될 수있는 다양한 방법에 대한 설명) Vinay Sahni의 블로그 : 실용적인 RESTful API 설계 우수 사례 (& # x201C를위한 URL 버전 관리에 대한 논쟁 ; 브라우저 탐색 가능성 & # x201D;) Pivotal Lans : API 버전 관리 (충돌 의견을 잘 볼 수 있음) Web Stack of Love : 미디어 유형을 사용하는 ASP 웹 API 버전 관리 (버전 별 지원을위한 앱 만들기의 완벽한 엔드 투 엔드) 콘텐츠 협상)
안녕하세요, 저는 Troy Hunt입니다. 이 블로그를 작성하고 Pluralsight의 과정을 만들고 이벤트 및 교육 기술 전문가에게 전 세계를 여행하는 Microsoft Regional Director 및 MVP입니다.
안녕하세요, 저는 Troy Hunt입니다. 이 블로그를 작성하고 Pluralsight의 과정을 만들고 이벤트 및 교육 기술 전문가에게 전 세계를 여행하는 Microsoft Regional Director 및 MVP입니다.
다가오는 이벤트.
나는 보통 이것들을 둘러싼 개인 워크샵을 진행하고 있으며 앞으로있을 공개 행사는 다음과 같습니다 :
Pluralsight가 이미 없습니까? 10 일 무료 평가판은 어떻습니까? 그러면 내 수십 가지 코스 중 수천 개의 코스에 액세스 할 수 있습니다.
"The Cloud Never Goes Down", Azure SLA 및 기타 이용 가능한 퀴즈.
벨이 해킹 된 방법은 다음과 같습니다.
지금 구독하십시오!
저작권 2017, 트로이 헌트.
이 저작물은 Creative Commons Attribution 4.0 International License에 따라 사용이 허여됩니다. 즉, 관대하게 공유하고 속성을 제공하십시오.
부인 성명.
여기에 표현 된 의견은 내 자신의 것이며, 내가 일하는 사람들, 내 친구, 아내, 아이들 등을 반영하지 않을 수 있습니다. 누군가를 인용하지 않는 한, 그들은 내 자신의 견해 일뿐입니다.
고스트와 함께 게시 됨.
이 사이트는 Ghost에서 완전히 실행되며 친절한 지원 덕분에 가능합니다. Ghost 사용을 선택한 이유에 대해 자세히 알아보십시오.
네 가지 REST API 버전 관리 전략.
이 기사에서는 네 가지 일반적인 REST API 버전 관리 전략을 설명하고 xMatters에서 REST API 버전을 어떻게 설명하는지 설명합니다.
xMatters에서 우리는 SemVer 사양 & # 8211; 주요 변경 사항을 도입 할 때마다 API 주 버전을 업데이트합니다. 내부적으로 우리는 기능 및 하위 호환 업데이트를 추가 할 때마다 마이너 및 패치 버전을 업데이트합니다. xMatters REST API의 새 주요 버전을 출시 할 때 클라이언트는 기존 주요 버전을 계속 사용하거나 새 버전으로 마이그레이션하도록 선택할 수 있습니다.
REST는 오늘날 인터넷을 통해 제 3 자에게 서비스를 제공하는 데 사용되는 가장 뛰어난 아키텍처 스타일입니다. SOAP 또는 RPC와 같은 더 복잡한 프로토콜 대신 HTTP 표준을 사용합니다. REST가 성공적으로 성공한 이유는 웹이 어떻게 작동 하는지를 모방 한 것입니다.
Stateless : 요청간에 클라이언트 컨텍스트를 유지하지 않습니다. 캐시 가능 : HTTP 캐싱 규칙을 사용합니다. 클라이언트 / 서버 지향 : 클라이언트와 서버 간의 관심사를 분리합니다. 계층화 된 시스템 및 통합 인터페이스를 활용합니다.
네 가지 일반적인 REST API 버전 관리 전략.
REST API를 버전을 지정하는 네 가지 일반적인 방법이 있습니다.
1. URI 경로를 통한 버전 관리.
REST API를 버전 화하는 한 가지 방법은 버전 번호를 URL 경로에 포함시키는 것입니다.
이 전략은 xMatters는 물론 Facebook, Twitter, Airbnb 등과 같은 다른 회사에서도 사용됩니다.
이 솔루션은 URI 라우팅을 사용하여 특정 API 버전을 가리키는 경우가 많습니다. 캐시 키 (이 경우 URI)는 버전에 따라 변경되므로 클라이언트는 쉽게 자원을 캐시 할 수 있습니다. REST API의 새 버전이 릴리스되면 캐시의 새 항목으로 인식됩니다.
API의 내부 버전은 다음과 같습니다.
주 버전 : URI에 사용 된 버전이며 API에 대한 변경 내용을 나타냅니다. 내부적으로 새 주요 버전은 새 API를 만드는 것을 의미하며 버전 번호는 올바른 호스트로 라우팅하는 데 사용됩니다.
사소한 버전 및 패치 버전 : 클라이언트에 투명하며 내부 호환 기능을 통해 이전 버전과의 호환성을 유지합니다. 일반적으로 변경 로그에서 전달되어 클라이언트에게 새로운 기능이나 버그 수정에 대해 알립니다.
이 솔루션은 급격한 변경을 도입하면 전체 API를 분기하는 것을 의미하므로 코드 기반에 상당히 큰 밑넓이가 있습니다.
2. 쿼리 매개 변수를 통한 버전 관리.
REST API를 버전 관리하는 또 다른 옵션은 버전 번호를 쿼리 매개 변수로 포함시키는 것입니다.
이것은 구현 관점에서 API를 간단히 버전 화하는 방법입니다. 또한 쿼리 매개 변수가 지정되지 않은 경우 최신 버전으로 기본 설정하는 것이 쉽습니다.
URI 버전 관리와 비교할 때 가장 큰 단점은 라우팅의 어려움입니다. 실제로 쿼리 매개 변수는 요청을 적절한 API 버전으로 라우팅하는 데 사용하기가 더 어렵습니다.
3. 사용자 정의 헤더를 통한 버전 관리.
REST API는 특성으로 포함 된 버전 번호가있는 사용자 정의 헤더를 제공하여 버전을 지정할 수도 있습니다.
이 접근 방식과 두 가지 이전 버전의 주요 차이점은 URI를 버전 정보와 함께 혼란스럽게하지 않는다는 것입니다.
4. 내용 협상을 통한 버전 관리.
curl - H & # 8220; accept : application / vnd. xm. device + json; 버전 = 1 & # 8221; example / api / products.
우리가 다루고있는 마지막 전략은 컨텐츠 협상을 통한 버전 관리입니다.
이 방법을 사용하면 전체 API를 버전 화하는 대신 단일 리소스 표현을 버전화할 수 있으므로 버전 관리를보다 세부적으로 제어 할 수 있습니다. 또한 새 버전을 만들 때 전체 응용 프로그램을 포크 할 필요가 없으므로 코드 기반에서 더 작은 공간을 만듭니다. 이 방법의 또 다른 이점은 URI 경로를 통해 버전을 지정하여 도입 된 URI 라우팅 규칙을 구현할 필요가 없다는 것입니다.
이 접근법의 단점 중 하나는 URI 버전 API보다 액세스하기가 쉽지 않다는 것입니다. 미디어 유형이있는 HTTP 헤더가 필요하면 브라우저를 사용하여 API를 테스트하고 탐색하기가 더 어려워집니다.
콘텐츠 협상은 전체 API의 버전을 지정하는 대신 리소스 표현을 버전 화하기 때문에보다 세분화 된 방식이지만 클라이언트와 개발자 모두에게 높은 구현 비용도 함께 제공됩니다. 흔히 제공하는 라이브러리가 거의 없기 때문에 콘텐츠 협상을 처음부터 구현해야합니다. 다른 접근 방식은 구현하기 쉽고 사용하기가 쉽지만 API 계약의 변경 사항을 도입하는 데 드는 높은 비용 때문에 개발자가 리팩토링 기능을 제한합니다.
어떤 생각이나 추천? 아래에 의견을 남겨주세요!
무료 백서 : 표준 + 사례에 대해 알아보십시오.
Rob England의 IT에 대한 총체적인 접근 방법에 대한 자세한 내용은 블로그 (The IT Skeptic) 및 Plus! 표준 + 사례 접근법. 자세한 내용은 정의되지 않은 사례 관리 상황을 xMatters로 작성된 새로운 표준 응답 모델로 바꾸는 방법에 대한 Rob의 새로운 백서를 읽어보십시오. Standard + Case : IT 응답 모델이 현대 운영을 주도하는 방식.
주 버전에 따라 포장 (폴더)을 만들어야합니까?
또 다른 질문은, 데이터베이스 테이블에서 API를 변경해야하는 경우 스키마의 버전을 변경하는 방법입니다. 어떤 링크?
그다지 자주 문서화되지 않은 한 가지는 코드와 API가 지원하는 모든 버전을 관리하는 방법입니다.
나는 코드를 관리하고 버전 악몽을 피하는 데 좋은 패턴을 찾기를 원했다.
spring-webmvc에 대한 제 3의 접근 방식의 구현 :
관심이있을 수도 있습니다.
AT & T, HP 및 Intel과 함께 Airbnb 환경을 해킹 한 방법
새로운 ServiceNow 통합으로 해결 시간 단축.
Moogsoft와 xMatters Integration은 새로운 수준의 인시던트 관리를 구현합니다.
좀비 작업은 방송으로 중단 될 수 없습니다.
지원이 필요하십니까?
우리의 헌신적 인 커뮤니티 사이트는 모든 xMatters 제품에 대한 도움을 얻을 수있는 최고의 장소입니다. 당사의 전문가 지원 팀과 지역 사회 사용자가 올바른 대답을 얻을 수 있도록 지원합니다.
Comments
Post a Comment