버전 관리 (& V)
좋은 API가 버전 관리됩니다. 변경 사항과 새로운 기능은 하나의 버전 만 지속적으로 변경하는 대신 새 API 버전에서 구현됩니다. 클라이언트 측 코드와 서버 측 코드를 모두 제어하는 웹 응용 프로그램과는 달리 API는 클라이언트가 제어 할 수 없을 정도로 클라이언트에서 사용하기위한 것입니다. 이러한 이유로 API의 하위 호환성 (BC)은 가능할 때마다 유지되어야합니다. BC를 깨뜨릴 수있는 변경이 필요한 경우 새 버전의 API에 도입하여 버전 번호를 지정해야합니다. 기존 클라이언트는 이전 버전의 API를 계속 사용할 수 있습니다. 신규 또는 업그레이드 된 클라이언트는 새 API 버전에서 새 기능을 사용할 수 있습니다.
팁 : API 버전 번호를 디자인하는 방법에 대한 자세한 내용은 시맨틱 버전 관리를 참조하십시오.
API 버전 관리를 구현하는 일반적인 방법 중 하나는 버전 번호를 API URL에 포함시키는 것입니다. 예를 들어, / v1 / users 예는 API 버전 1의 / users 끝점을 의미합니다.
최근에 추진력을 얻은 또 다른 API 버전 관리 방법은 버전 번호를 HTTP 요청 헤더에 넣는 것입니다. 일반적으로 Accept 헤더를 통해 이루어집니다.
두 방법 모두 장단점이 있으며 각 방법에 대한 많은 논란이 있습니다. 아래에서 두 가지 방법을 혼합 한 API 버전 관리를위한 실용적인 전략을 살펴 보겠습니다.
API 구현의 각 주요 버전을 ID가 주요 버전 번호 (예 : v1, v2) 인 별도 모듈에 넣습니다. 당연히 API URL에는 주요 버전 번호가 포함됩니다. 각 주요 버전 내에서 (따라서 해당 모듈 내에서) Accept HTTP 요청 헤더를 사용하여 부 버전 번호를 판별하고 이에 따라 부 버전에 응답하는 조건부 코드를 작성하십시오.
주 버전을 제공하는 각 모듈에 대해 모듈에는 해당 버전을 지원하는 리소스 및 컨트롤러 클래스가 포함되어야합니다. 코드 책임을보다 잘 분리하기 위해 공통된 기본 리소스 및 컨트롤러 클래스 집합을 유지하고 각 개별 버전 모듈에서 하위 클래스를 하위 클래스로 만들 수 있습니다. 서브 클래스 내에서 Model :: fields ()와 같은 구체적인 코드를 구현하십시오.
코드는 다음과 같이 구성 될 수 있습니다.
응용 프로그램 구성은 다음과 같습니다.
위 코드의 결과로 example / v1 / users는 버전 1의 사용자 목록을 반환하고 / example / v2 / users는 버전 2 사용자를 반환합니다.
모듈 덕분에 서로 다른 주요 버전의 코드가 잘 분리 될 수 있습니다. 하지만 모듈을 사용하면 공통 기본 클래스 및 기타 공유 리소스를 통해 모듈간에 코드를 재사용 할 수 있습니다.
부 버전 번호를 처리하기 위해 contentNegotiator 비헤이비어가 제공하는 내용 협상 기능을 이용할 수 있습니다. contentNegotiator 비헤이비어는 지원할 콘텐츠 유형을 결정할 때 yii \ web \ Response :: $ acceptParams 속성을 설정합니다.
예를 들어 요청이 HTTP 헤더와 함께 전송 된 경우 Accept : application / json; version = v1, 콘텐츠 협상 후, yii \ web \ Response :: $ acceptParams는 [ 'version'= & gt; 'v1'].
acceptParams의 버전 정보를 기반으로 적절한 기능을 제공하기 위해 작업, 리소스 클래스, serializer 등과 같은 위치에 조건부 코드를 작성할 수 있습니다.
정의에 따른 부 버전은 이전 버전과의 호환성을 유지해야하기 때문에 코드에 버전 확인이 많지 않기를 바랍니다. 그렇지 않으면 새로운 주요 버전을 만들어야 할 수도 있습니다.
월, 2017 년 12 월 18 일 12:46:39 +0100에 생성 된 페이지입니다.
귀하의 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; 하루 만에 시작했으나 & # 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 사용을 선택한 이유에 대해 자세히 알아보십시오.
서비스 재시작 전략
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
API 버전 관리 모범 사례? [닫은]
웹 서비스 REST API 버전 관리를위한 알려진 방법 또는 모범 사례가 있습니까?
나는 AWS가 엔드 포인트의 URL에 의한 버전 관리를한다는 것을 알았다. 이것이 유일한 방법입니까 아니면 같은 목표를 성취 할 수있는 다른 방법이 있습니까? 여러 가지 방법이 있다면 각 방법의 장점은 무엇입니까?
templatetypedef, amon, George Stocker & # 9830;에 의해 주로 의견 기반으로 마감되었습니다. 3 월 6 일 14시 13 분 22 초
많은 좋은 질문은 전문가의 경험을 토대로 어느 정도 의견을 제시하지만, 이 질문에 대한 답변은 사실, 참고 문헌 또는 특정 전문 지식보다는 의견에 거의 근거를 두는 경향이 있습니다. 이 질문을 도움말 센터의 규칙에 맞게 수정하려면 질문을 수정하십시오.
animuson 님에 의해 잠김 & # 9830; 3 월 8 일 16시 3시 40 분.
이 질문은 역사적인 의미가 있기 때문에 존재하지만이 사이트에 대한 주제에 관한 좋은 질문으로 간주되지 않으므로 여기에서 비슷한 질문을 할 수있는 증거로 사용하지 마십시오. 이 질문과 답변은 고정되어 있으며 변경할 수 없습니다. 추가 정보 : 도움말 센터.
이것은 좋고 까다로운 질문입니다. URI 디자인의 주제는 동시에 REST API의 가장 중요한 부분이며, 따라서 해당 API 사용자에 대한 잠재적 인 장기적 약속입니다.
응용 프로그램의 진화와 그보다 낮은 수준의 API는 삶의 사실이며 프로그래밍 언어와 같이 겉으로보기에는 복잡한 제품의 진화와 유사하기 때문에 URI 디자인은 자연적인 제약이 적어야하며 보존해야합니다. 시간이 지남에. 응용 프로그램과 API의 수명이 길어질수록 응용 프로그램과 API의 사용자에 대한 책임이 커집니다.
반면에, 또 다른 삶의 사실은 API를 통해 소비 될 모든 자원과 측면을 예측하기 어렵다는 것입니다. 다행히 Apocalypse까지 사용할 전체 API를 설계 할 필요는 없습니다. 모든 자원 및 자원 인스턴스의 모든 자원 끝점과 주소 체계를 올바르게 정의하면 충분합니다.
시간이 지남에 따라 각 특정 리소스에 새로운 리소스와 새로운 특성을 추가해야 할 수도 있습니다. 하지만 API 사용자가 특정 리소스에 액세스하기 위해 따르는 방법은 리소스 주소 지정 체계가 공개되고 최종적으로 변경되지 않아야합니다.
이 방법은 HTTP verb 의미론 (예 : PUT은 항상 업데이트 / 대체해야 함) 및 이전 API 버전에서 지원되는 HTTP 상태 코드에 적용됩니다 (사용자 개입없이 작업 한 API 클라이언트가 계속 작동 할 수 있어야 함). 그런 식으로).
또한 API 버전을 URI에 포함 시키면 시간이 지남에 따라 변할 리소스 주소 / URI가 있으므로 응용 프로그램 상태 엔진 (Roy T. Fieldings PhD 논문에서 언급 한)의 하이퍼 미디어 개념이 중단되므로 API 버전은 API 사용자가 의존 할 수있는 리소스 URI가 퍼머 링크가되어야 함을 의미하는 오랜 시간 동안 리소스 URI에 보관되어서는 안됩니다.
물론 기본 URI에 API 버전을 포함 할 수는 있지만 새 API 버전에서 작동하는 API 클라이언트를 디버깅하는 것과 같이 합리적이고 제한된 용도로만 사용할 수 있습니다. 이러한 버전이있는 API는 시간 제한적이어야하며 폐쇄 된 베타와 같이 제한된 API 사용자 그룹 만 사용할 수 있습니다. 그렇지 않으면, 당신은 당신이하지 말아야 할 곳을 저 지르게됩니다.
만료 날짜가있는 API 버전 유지에 관한 몇 가지 생각. 웹 서비스 (Java, PHP, Perl, Rails 등)를 구현하는 데 일반적으로 사용되는 모든 프로그래밍 플랫폼 / 언어는 웹 서비스 종점을 기본 URI에 쉽게 바인딩 할 수 있도록합니다. 이렇게하면 여러 API 버전간에 파일 / 클래스 / 메소드 모음을 쉽게 수집하고 보관할 수 있습니다.
API 사용자 인 POV에서 특정 API 버전으로 작업하고 바인딩하는 것이 더 쉬울뿐만 아니라 제한된 시간 동안 (즉 개발 중에) 분명합니다.
API 관리자의 POV에서, (소스 코드) 버전 관리의 가장 작은 단위로 주로 파일에서 작동하는 소스 제어 시스템을 사용하여 다른 API 버전을 병렬로 유지하는 것이 더 쉽습니다.
그러나 API 버전이 URI에 명확하게 표시되어 있으면주의해야합니다. URI 기록에서 API 기록이 가시적으로 보이고 aparent가되므로 REST의 지침에 위배되는 시간이 지남에 따라 변경되기 쉽습니다. 나는 동의한다!
이러한 합리적인 반대를 피하는 방법은 버전없는 API 기본 URI로 최신 API 버전을 구현하는 것입니다. 이 경우 API 클라이언트 개발자는 다음 중 하나를 선택할 수 있습니다.
최신 API에 맞서 개발하십시오 (잘못 설계된 API 클라이언트를 깨뜨릴 수있는 API 변경을 막기 위해 응용 프로그램을 유지 관리해야 함).
제한된 시간 동안 만 API의 특정 버전에 바인딩됩니다 (명백 해짐).
예를 들어 API v3.0이 최신 API 버전 인 경우 다음 2 개는 별칭이어야합니다 (즉 모든 API 요청과 동일하게 작동해야 함).
또한 이전 API를 가리키는 API 클라이언트는 사용중인 API 버전이 더 이상 지원되지 않거나 더 이상 지원되지 않는 경우 최신 API 버전을 사용하도록 알려야합니다. 따라서 다음과 같은 쓸모없는 URI에 액세스하십시오.
Location URI 헤더와 함께 사용되는 리디렉션을 나타내는 30x HTTP 상태 코드 중 하나를 반환해야합니다. 이 상태 코드는 리소스 URI의 해당 버전으로 리디렉션됩니다.
API 버전 관리 시나리오에 적합한 리디렉션 HTTP 상태 코드가 두 개 이상 있습니다.
301 요청 된 URI를 가진 자원이 다른 URI (API 버전 정보를 포함하지 않는 자원 인스턴스 퍼머 링크 여야 함)로 영구적으로 이동되었음을 나타내는 영구적으로 이동되었습니다. 이 상태 코드는 버전이 지정된 리소스 URI가 리소스 퍼머 링크로 대체되었음을 API 클라이언트에 알리지 않고 더 이상 지원되지 않는 API 버전을 나타내는 데 사용할 수 있습니다.
302 요청한 리소스가 일시적으로 다른 위치에 있지만 요청한 URI가 계속 지원 될 수 있음을 나타내는 Found입니다. 이 상태 코드는 버전없는 URI를 일시적으로 사용할 수없고 리디렉션 주소 (예 : APi 버전이 포함 된 URI를 가리키는 등)를 사용하여 요청을 반복해야하며 클라이언트가 계속 사용하도록 알리고 싶을 때 유용합니다 (예 : permalinks).
URL에 버전이 없어야합니다. 이 버전은 요청한 리소스의 "아이디어"와 아무런 관련이 없습니다. URL을 원하는 개념에 대한 경로로 생각해야합니다. 즉, 항목을 어떻게 반환 할 것인지를 결정하는 것이 아닙니다. 버전은 객체의 개념이 아니라 객체의 표현을 나타냅니다. 다른 포스터가 말했듯이 요청 헤더에 형식 (버전 포함)을 지정해야합니다.
버전이있는 URL에 대한 전체 HTTP 요청을 살펴보면 다음과 같습니다.
헤더에는 요청한 표현이 들어있는 행이 있습니다 ( "Accept : application / xml"). 바로 그 버전이 있어야합니다. 모두는 당신이 다른 형식으로 동일한 것을 원하고 클라이언트가 원하는 것을 요구할 수 있어야한다는 사실에 대해 광택을주는 것처럼 보입니다. 위의 예에서 클라이언트는 리소스의 XML 표현을 요구합니다. 실제로 원하는 표현을 나타내는 것은 아닙니다. 서버는 이론적으로 XML 인 경우 요청과 관련이없는 무언가를 반환 할 수 있으며 잘못되었다는 것을 파싱해야합니다.
더 좋은 방법은 다음과 같습니다.
더 나아가, 클라이언트가 XML이 너무 장황하다고 생각하고 대신 JSON을 원한다고 가정 해 봅시다. 다른 예제에서는 동일한 고객에 대한 새 URL을 가져야하므로 다음과 같이 끝납니다.
(또는 비슷한). 실제로 모든 HTTP 요청에는 원하는 형식이 포함됩니다.
이 방법을 사용하면 훨씬 더 자유롭게 디자인 할 수 있으며 실제로 REST의 원래 아이디어를 고수하고 있습니다. 클라이언트를 방해하지 않고 버전을 변경하거나 API가 변경되면 점진적으로 클라이언트를 변경할 수 있습니다. 표현 지원을 중지하도록 선택한 경우 HTTP 상태 코드 또는 사용자 정의 코드로 요청에 응답 할 수 있습니다. 클라이언트는 응답이 올바른 형식인지 확인하고 XML의 유효성을 검사 할 수도 있습니다.
URL에 버전을 넣는 것이 나쁜 방법을 보여주는 마지막 예가 하나 있습니다. 오브젝트 내부에 정보를 원한다고 말하면서 다양한 오브젝트를 버전 관리했다 (고객은 v3.0, 주문은 v2.0, shipto 오브젝트는 v4.2). 다음은 클라이언트에서 제공해야하는 불쾌한 URL입니다.
우리는 버전을 URL에 넣는 것이 실용적이고 유용하다는 것을 알았습니다. 그것은 당신이 한 눈에 사용하고있는 것을 쉽게 알려줍니다. 허용 된 답변에서 제안하는 바와 같이 / foo / (가장 최신 버전)의 별칭 / foo를 사용 용이성, 더 짧고 / 깨끗한 URL 등을 위해 수행합니다.
하위 호환성을 영원히 유지하는 것은 종종 비용이 많이 들거나 매우 어렵습니다. 더 이상 지원 중단 될 것이라는 점, 여기에 제안 된 것과 같은 리디렉션, 문서 및 기타 메커니즘을 사전에 알리는 것이 좋습니다.
리소스 표현의 버전 관리가 REST 접근법을 따르는 것이 더 낫다는 것에 동의합니다. 하지만 사용자 정의 MIME 유형 (또는 버전 매개 변수를 추가하는 MIME 유형)의 큰 문제점 중 하나는 HTML 및 JavaScript의 Accept 및 Content-Type 헤더에 쓸 수없는 지원입니다.
예를 들어 리소스를 만들려면 HTML5 양식에 다음 헤더를 사용하여 POST 할 수 없습니다.
이것은 HTML5 enctype 속성이 열거 형이므로 일반적인 application / x-www-formurlencoded, multipart / form-data 및 text / plain 이외의 다른 것은 유효하지 않기 때문입니다.
. HTML4에있는 모든 브라우저에서 지원되는지 확신 할 수 없습니다 (좀 더 느슨한 encytpe 속성을 갖지만 MIME 유형이 전달되었는지 여부에 대한 브라우저 구현 문제 일 것입니다)
이 때문에 나는 URI를 통해 버전을 만드는 가장 적절한 방법이 있다고 생각하지만 올바른 방법이 아니라고 생각합니다.
귀하의 버전을 URI에 넣으십시오. 한 버전의 API가 다른 유형의 API를 항상 지원하지는 않기 때문에 리소스가 한 버전에서 다른 버전으로 마이그레이션된다는 논쟁은 명백히 잘못되었습니다. XML에서 JSON으로 형식을 전환하는 것과 같지 않습니다. 유형이 존재하지 않거나 의미 적으로 변경되었을 수 있습니다.
버전은 리소스 주소의 일부입니다. 하나의 API에서 다른 API로 라우팅합니다. 헤더에서 주소 지정을 숨기려면 RESTful이 아닙니다.
REST API에서 버전 관리를 할 수있는 몇 가지 장소가 있습니다.
언급 한 바와 같이, URI에서. 리다이렉트 (redirect) 등이 잘 사용된다면 이는 다루기 쉽고 심미적으로 즐겁다.
Accepts : 헤더에서 버전이 파일 유형에 있도록합니다. 'mp3'vs 'mp4'처럼. 이것은 IMO가 다소 덜 능숙하게 작동하지만 작동합니다.
자원 그 자체. 많은 파일 형식에는 일반적으로 헤더에 버전 번호가 포함되어 있습니다. 이것은 새로운 소프트웨어가 파일 형식의 모든 기존 버전을 이해함으로써 '정당한 작업'을 할 수있게하며, 구 버전의 소프트웨어가 지원되지 않는 (최신) 버전이 지정된 경우 펀트 할 수 있습니다. REST API의 컨텍스트에서 URI가 변경 될 필요가 없으며 전달 된 데이터의 특정 버전에 대한 응답 만 의미합니다.
세 가지 접근법을 모두 사용해야하는 이유를 알 수 있습니다.
'깨끗한 스윕 (clean sweep)'새로운 API를 원한다면, 또는 그러한 접근 방식을 원할 경우 주요 버전을 변경하십시오. 클라이언트가 PUT / POST를 수행하기 전에 클라이언트가 알 수 있도록하려면 작동 여부를 결정해야합니다. 클라이언트가 PUT / POST를 수행하여 작동 여부를 확인해야한다면 괜찮습니다.
REST API의 버전 관리는 다른 API의 버전 관리와 유사합니다. 사소한 변경 작업을 수행 할 수 있으며 주요 변경 사항에는 완전히 새로운 API가 필요할 수 있습니다. 가장 쉬운 방법은 매번 처음부터 시작하는 것입니다. URL에 버전을 넣는 것이 가장 적합합니다. 클라이언트의 삶을 편하게하려면 역 호환성을 유지하려고 노력합니다. 영구적 인 리디렉션, 영구적 인 리디렉션, 여러 버전의 리소스 등을 통해 수행 할 수 있습니다. 이는 더 까다 롭고 많은 노력이 필요합니다. 그러나 REST가 "멋진 URI는 변경되지 않습니다"에서 권장하는 사항이기도합니다.
결국 다른 API 디자인과 같습니다. 고객의 편의를 위해 노력하십시오. API에 대한 의미있는 버전 관리를 채택하는 것이 좋습니다. 그러면 클라이언트가 새 버전과의 하위 호환성 방법을 명확하게 알 수 있습니다.
REST 웹 서비스의 버전 관리.
API 변경 관리는 어렵습니다. 그것은 어떤 종류의 API도 유지해온 누구에게도 놀라운 일이 아닙니다. API의 특별한 경우 인 웹 서비스는 다른 유형의 API로서 버전 관리와 관련하여 많은 어려움을 겪을 수 있습니다. HTTP 기반 REST 스타일 웹 서비스의 경우 자원 및 콘텐츠 협상 조합을 사용하여 API 버전 관리와 관련된 대부분의 문제를 완화 할 수 있습니다.
일부 계정 리소스가있는 REST / HTTP 웹 서비스가 있다고 가정합니다. 다음과 같이 요청할 수 있습니다.
먼저, 내 예제가 공급 업체 MIME 미디어 유형을 사용하여 표현을 설명한다는 것을 알았을 것입니다. application / xml과 같은보다 일반적인 MIME 미디어 유형을 사용하는 것이 적어도 내 경험에서는 훨씬 더 일반적입니다. 일반적인 미디어 유형을 사용하는 것은 완전히 합법적이지만 조금 바보입니다. 여러분은 오래된 XML 문서를 요구하는 것이 아니라 상당히 특정한 스키마를 가진 XML 문서를 요구합니다. 이상 주의적 난제를 제외하고, 특정 미디어 유형을 사용하는 것은이 게시물의 핵심에있는 몇 가지 강력한 실용적인 이점을 가지고 있습니다.
이전 버전과 호환되는 변경 사항.
올바르게 구현 된 클라이언트에 부정적인 영향을 미치지 않는 시스템의 새로운 동작을 노출하기 위해 변경 작업을 수행해야하는 경우가 있습니다. 예를 들어 계정의 주소 추적을 시작하려고한다고 가정 해보십시오. application / vnd. mycompany. myapp + xml 형식 문서에서 인식되지 않는 요소가 무시되어야한다는 것이 확실한 경우 단순히 계정 표현에 요소를 추가하면됩니다.
요소를 추가하기 전에 만들어진 모든 클라이언트는 요소를 무시합니다. 문제 해결됨.
호환되지 않는 변경 사항.
불행히도 모든 변경 사항이 이전 버전과 호환되는 방식으로 구현 될 수있는 것은 아닙니다. 예를 들어, 계정에 추가 한 지 2 개월 후에 영업 팀이 1 bazillion 달러의 거래를 체결합니다. 그러나 새로운 고객은 각 계정에 하나 이상의 주소가 허용되도록 요구합니다. 잠시 생각한 후에는 계정 표현을 다음과 같이 변경하는 것이 가장 좋은 방법이라고 판단합니다.
물론, 이전 형식을 기대하는 클라이언트는 모두 중단됩니다. & # 8211; 그래서 거의 모두. 이것은 콘텐츠 협상을 이끌어 낼 수있는 곳입니다. 새로운 미디어 유형을 정의 할 수 있습니다. & # 8211; application / vnd. mycompany. myapp-v2 + xml & # 8211;이라고 말하십시오. 새 멀티 형식을이 형식과 연관시킵니다. 클라이언트는 원하는 형식을 요구할 수 있습니다. 오래된 고객은 새 미디어 유형을 알지 못하므로 이전 단일 형식으로 제공됩니다.
최신 고객은 새 미디어 유형을 알고 있으므로 새 기능에 액세스 할 수 있습니다.
모두가 필요한 것을 얻습니다. 파이처럼 쉽습니다.
대체 접근법.
오늘날 REST / HTTP 웹 서비스 인터페이스를 버전 관리하기 위해 가장 일반적으로 제안되는 접근법은 버전을 삽입하여 URI를 훼손하는 것 같습니다. 예를 들어,
API의 한 버전에있는 계정이 실제로 다른 API 버전에있는 계정과 다른 리소스라는 것을 의미하므로이 접근법을 정말 싫어합니다.
또한 클라이언트를 여러 가지 버전의 API를 동시에 지원하거나 REST의 핵심 제약 조건 중 하나를 깨뜨리는 심한 선택을하게합니다. 예를 들어 계정에 버전 참조를 포함하는 URI (참조)를 저장하는 v1 API에 대한 클라이언트가 있다고 가정 해 보겠습니다. 얼마 후 클라이언트는 새 버전의 API를 지원하도록 업데이트됩니다. 이 상황에서 클라이언트는 이전에 저장된 모든 URI가 API의 이전 버전을 가리 키거나 저장 한 모든 URI를 새 API의 지점으로 보내야하기 때문에 클라이언트는 두 버전의 API를 동시에 지원할 수 있습니다. 모든 URIS를 무자비하게 만드는 것은 REST의 HATEOAS 제약을 깨고 여러 버전의 API를 지원하는 것은 유지 보수의 악몽이다.
결론.
REST / HTTP 웹 서비스 인터페이스를 변경하면 세 가지 기본 특성, 한 가지 유형의 자원과 관련된 특성의 변경, 새로운 유형의 자원의 추가 및 쓸모없는 유형의 자원의 사용 중단이 있습니다. REST의 HATEOAS 제약 조건을 따르는 경우 여기서 설명한 방법을 사용하여 세 가지 시나리오를 모두 안전하게 처리 할 수 있습니다.
이 접근법은 미디어 유형이 생성되도록 유도하지만 미디어 유형은 저렴하여 & # 8211; & # 8211; 우리가 필요로하는만큼 많이 가져라. 적절히 사용하면 REST / HTTP 웹 서비스 인터페이스의 버전 관리와 관련된 문제점을 해결하기 위해 컨텐츠 협상을 사용할 수 있습니다.
관련 게시물.
REST / HTTP 서비스 버전 관리에 관심이 있다면 나머지 시리즈를 놓치지 않도록하십시오.
69 개의 댓글에 & ldquo; REST 웹 서비스 버전 관리 & rdquo;
[& # 8230;] Peter Williams & # 8211; REST 웹 서비스 버전 관리 & # 8211; API 버저 닝 (versioning)을 처리하기위한 오래된 문서이지만 멋진 대안 [& # 8230;]
이 기능은 읽기 / 쓰기 API와 어떻게 작동합니까? 속성을 변경되지 않은 변경 사항으로 추가하여 미디어 유형을 변경하지 않으면 이전 클라이언트는 PUT 및 POST 데이터에서 새 속성이 누락 된 상태로 계속 진행합니다. 특성을 기본값으로 설정하거나 특성의 현재 값을 변경하지 않고 서버에서 수정할 수는 있지만 캐시 된 버전을 부분 업데이트로 대체 할 수있는 캐시에 문제가 있습니까? PUT을 사용하여 부분 업데이트를 수행하는 것과 실질적으로 동일한 문제가 아닙니까?
PUT의 중요한 특징은 멱등수 일 필요가 있다는 것입니다. 부분 업데이트는 허용하지 않습니다. PUT 요청 본문은 자원의 모든 특성을 포함하지 않는 것이 일반적입니다. 예를 들어, 마지막으로 업데이트 된 시간 소인 필드.
나는이 사건이 멱등수가 될 것입니다. 오래된 고객은이 새로운 부동산에 대해 알지도 모르고도 신경 쓰지 않으므로 실제로 가치가 어떻게 취급되는지는 신경 쓰지 않습니다. 누락 된 속성 값을 처리하기 위해 언급 한 방법 중 하나라도 괜찮습니다.
캐시가 스스로 처리합니다. 캐시는 PUT의 몸체를 사용하지 않습니다. 그들은 단순히 그 자원에 대해 이전에 캐시 된 표현을 무효화합니다. 즉, 해당 리소스에 대한 다음 GET 요청이 서버로 보내지고 응답이 캐시됩니다. 새 속성이 항상 반환된다고 가정하면 캐시는 최신 상태로 유지됩니다.
ACCEPT 헤더 & # 8211; POST / PUT의 Content-type에도 동일하게 적용됩니까? API는 입력 AND 출력으로 구성됩니다.
이는 POST 및 PUT 요청의 내용 유형에 절대적으로 적용됩니다. GET 요청의 accept 헤더 필드에서 서버가 클라이언트에게 필요한 특정 표현을 제공 할 수있게하는 것처럼 POST 및 PUT 요청의 content-type 헤더 필드는 클라이언트가 설정 한 데이터를 올바르게 해석하는 데 필요한 정보를 서버에 제공합니다.
여기 및 Jean & # 8221;에 대한 & # 8220; 수락 확장 프로그램이 & nbsp; 수준 & # 8221;과 같은 생각을하지 않는다는 것을 게시하십시오. 또는 & # 8220; 버전 & # 8221; 호환되지 않는 (즉, 주 버전) 변경 사항을 나타내는 데 적합합니다. 그러나 HTTP 스펙 및 관련 역사 문서에서 예제를 읽은 것은 그것이 내가 의도 한 목적과 정확히 같다고 믿는다. & # 8220; 수준의 모든 사용; 역사적으로 확장 기능은 & # 8220; text / html & # 8221; HTML 형식의 주요 버전 (HTML 2, HTML 3 등)을 나타 내기 위해 사용됩니다. 1995 년 일자로 작성된이 페이지 (w3.org/MarkUp/table-deployment)는 text / html ; level = 3 & # 8221; 미디어 유형은 마크 업을 이해하지 못했고 그렇게하려고 시도해서는 안되는 클라이언트 만 HTML 2에 알립니다.
즉, 이것은 주로 학문적 인 운동입니다. 특정 정의가 없으면 미디어 유형이 불투명 한 문자열로 처리되어야하는 것처럼 보입니다. & # 8220; application / vnd. mycompany. myapp-v2 + xml & # 8221; & # 8220; application / vnd. mycompany. myapp + xml; level = 2 & # 8221; 둘 다 같은 목적을 수행합니다. 전자가 더 나은 포맷 인 것에 대한 합의가있는 것처럼 보이기 때문에, 나중의 포맷이 덜 유효하다는 이유를 모르겠다. 실제로 & # 8220; 수준 & # 8221; 사소한 버전 관리를위한 확장은 역사적인 선례에 반하는 것처럼 보이지만 사용자 지정 MIME 시간에 사용되는 경우에는 (IMHO) 허용되고 무해합니다.
소개 SeeMyRadiology는 REST 아키텍처 스타일을 사용하여 통합 기능을 노출합니다. 이 문서는 API가 사용하는 미디어 유형 및 표현에 대해 설명합니다. 대상 독자이 문서는 REST # & # 8230;에 대한 소개가 아닙니다.
[# 8230;] API 버전 관리에는 개념 아이디어가 있습니다. REST Web Services 버전 관리 [& # 8230;]
[& # 8230;] REST 웹 서비스 버전 지정 [& # 8230;]
2012 년 여름 RESTful 데이터를위한 인턴십 아이디어 & # 8230;
버전 관리 API를위한 전략은 무엇입니까? & # 8230;
몇 년에 한 번 API에 급진적 인 변경을 게시하고 문서화해야하지만 경로의 루트에서 명시적인 버전 관리를 권장해야하는 경우 REST 예제는 / api / v2 / resource / 123 / sub 일 수 있습니다. 하위 도메인 수준에서이 작업을 수행하면 & # 8230;
안녕하세요. 모든 분들께, 이 사이트 방문 비용은 정말 좋지만 귀중한 정보가 포함되어 있습니다.
WebService 버전 관리 정책 WebService 버전 관리에 대한 정보로 연결됩니다.
[& # 8230;]은 여전히 파이프 라인에 있습니다. 여전히 EDI를 사용하는 수많은 회사가있는 것처럼 XML을 사용하여 온라인으로 응답을 게시하고 읽어야하는 프로젝트를 진행하고 있습니다. 예를 들어 웹 사이트 사용자가 선택을하고 POST를 보통의 오래된 XML로 돌려 놓으면 다른 응답을받습니다. (& # 8230;)
WebService 버전 관리를위한 일반적인 기술 # 변경 유형 이해 # 유연한 바인딩 접근법 사용 # 간접 접근법을 사용하여 서비스 엔드 포인트 획득 (버전 관리 서비스 레지스트리로 UDDI 사용) # 서비스의 모든 측면, & # 8230;
[& # 8230;]이 MIME 유형을 사용하는 API를 버전화할 때와는 별도로 X-Gowalla-API-Version 헤더를 별도로 사용하여 [& # 8230;]
[& # 8230;] API - это разные ресурсы. API를 사용하여 응용 프로그램 / vnd. mycompany. myapp-v2 + xml을 수락하십시오. Концептуально это мне [& # 8230;]
소개 TBW API 정의 페이지는 b & # 8230;
코멘트 탐색.
코멘트는 닫힙니다.
소식 탐색.
제 이름은 피터 윌리엄스입니다. 저는 아버지이자 소프트웨어 개발자입니다. (물론 다른 몇 가지 일을하지만 가족과 소프트웨어는 내가 가장 열정적 인 것입니다.)이 블로그는 주로 너무 많은 사람들을 겁 내지 않고 호언 장담 할 수있는 곳이지만 가끔 관심있는 것을 가족에게 기록합니다 이리.
No comments:
Post a Comment