비누 버전 관리 전략


비누 버전 전략
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
웹 서비스 업데이트 또는 버전 관리 전략
다른 버전의 웹 서비스가 어떻게 처리되는지에 대한 베스트 프랙티스를 듣고 싶습니다.
명확하게하기 위해 웹 서비스로 노출 된 웹 메소드가있는 경우 기능 / 기능을 추가하여 해당 메소드 호출의 서명을 변경하려는 경우 모든 것을 손상시키지 않는 방식으로이 메소드를 처리하는 방법 현재 서비스를 호출하는 고객의
다른 URL에 서비스를 배포합니까?
메서드 이름 자체에 버전을 지정합니까 (MyMethod, MyMethodv2 등).
매개 변수 목록과 함께 메서드 호출의 일부로 버전을 전달합니까?
누구든지 Google이나 Amazon이 이러한 시나리오를 광범위한 웹 서비스 라이브러리로 처리하는 방법을 알고 있습니까?
편집 : 지금까지 오라클 에서이 문서에 좋은 정보를 발견. 또한이 자바 항목에 대한 블로그 항목도 유용했습니다. 나는 여전히 다른 접근 방식 중 일부를보고 싶어한다.
웹 서비스를 버전 관리하는 일반적인 방법은 클라이언트가 원하는 버전을 지정하도록하는 것입니다. "> 2.0", "<1.5"또는 "= 1.1"과 같은 간단한 제약 조건을 허용 할 수 있습니다. 당연히, 당신은 자신의 온 전성을 위해 지원되는 버전의 수를 최소화하고 싶습니다. 클라이언트가 버전을 지정하지 않으면 최신 버전을 사용합니다.
버전을 제공하는 기술은 다양합니다. 일부는 URL을 사용하고 다른 일부는 헤더를 권장하고 일부는 API 호출의 매개 변수로 포함시킬 수 있습니다. 그러나 거의 아무도 메소드의 이름을 변경하지 않습니다. OSGi 링크를 버전 화하는 "패키지"또는 "네임 스페이스"와 동일한 의미가 있습니다. 업그레이드가 매우 어려워지고 실제 서비스 변경보다 사람들이 업그레이드하는 것을 방해합니다.
또한 웹 서비스에 액세스하는 방법에 따라 다릅니다. REST를 사용하는 경우 URL을 깨끗하게 유지하고 헤더를 사용하는 것이 가장 적합합니다 (필요한 경우 검색어 매개 변수로 해킹하는 것은 간단합니다). SOAP / XMLRPC / whatever-RPC를 사용하고 있다면 URL에 넣는 것이 좋습니다.
클라이언트가 버전을 지정하는 방법은 일반적으로 매우 쉽습니다. 더 복잡한 것은 모든 버전을 동시에 실행하는 방법입니다. 대부분의 언어는 동일한 라이브러리 / 모듈 / 클래스 / 함수의 여러 버전을 동일한 런타임 환경 (VM, 프로세스 또는 기타 사용자)으로로드 할 수있는 방법이 없습니다. 제공 한 OSGi 링크는이를 허용하는 Java의 솔루션입니다.
실제로 OSGi는 대부분의 상황에서 과도하게 사용됩니다. 대개 더 이상 사용되지 않는 요청을 다른 서버 또는 프로세스에 프록시하는 것이 더 쉽습니다.
하지만 서비스의 "버전"을 향상시키는 가장 좋은 방법은 확장 성 및 유연성을 구축하여 전방 및 후방 호환성을 유지하는 것입니다. 그렇다고 모든 버전이 서로 호환되어야한다는 의미는 아니지만 연속 버전은 서로 호환되어야합니다.
doAPIFunction, doAPIFunctionV2 및 doAPIFunctionV3 등을 만드는 솔루션은 제가 일하는 곳에서 두통을 일으키지 않았다고 말할 수 있습니다. 명확하게 설명하는 함수 이름이 부족하다는 것은 모든 종류의 광기를 의미합니다.
명확한 API 함수 이름이 필요하며 API가 변경되면 가능한 한 이전 버전과 호환되도록 시도하고 수행하는 것이 목표입니다. 각 진입 점이 안정적인 API를 지원하고 example. org/api-1.0/의 doFunction이 의미를 변경해야하는 좋은 이유가있는 경우 example. org/api-2.0과 다를 수 있으므로 진입 점의 버전을 지정하는 것이 좋습니다.
나는 당신의 질문을 정확하게 이해할 지 확신하지 못합니다. 하지만 2 센트. 메소드의 시그니처가 다른 새로운 매개 변수와 같이 변경되면 선택 사항이 될 수없는 이유는 무엇입니까? 그러나 기존 매개 변수 데이터 유형이 변경되면 적용 할 수 없습니다.
명백하지 않은 경우이 점에 투표하십시오. :)
몇 년 전에 동일한 웹 서비스 메서드 이름과 다른 매개 변수를 사용할 수 있었을 때 더 간단했습니다. :)
웹 서비스를 작성하고 나면 고객과 계약을 맺고 이것이 지원할 것입니다.
오래된 방법의 경우, 내가 사용하고 있는지, 그리고 누구에 의해 업데이트를받을 수 있는지를 알기 위해 로깅을 제안 할 것입니다.
다른 방법으로는 가장 좋은 방법은 새로운 메소드를 작성하는 것입니다. 따라서 버전에 따라 여러 가지 유사한 함수 이름을 사용할 수 있습니다.
버전 번호를 전달할 때의 문제는 클라이언트가 항상 유효한 숫자를 전달하는지 확인해야한다는 것입니다. 스텁을 생성하면 작동하지만, 그렇지 않으면 매우 약해집니다.
이름에 버전 번호를 넣는 것이 나에게 가장 효과적 인 것처럼 보입니다. 예전 버전을 분명히 알 수 있으며 AOP를 사용하여 이전 버전의 웹 서비스 메소드를 더 쉽게 기록 할 수 있습니다.

비누 버전 전략
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
웹 서비스 API 버전 관리.
시간이 지남에 따라 발전 할 계획 인 고객에게 소규모 웹 서비스 API를 제공합니다. 따라서 어떤 종류의 버전 관리가 필요하지만 어떻게 그렇게하는지에 대한 정보는 찾을 수 없습니다.
모범 사례가 있습니까?
웹 서비스 소비자와의 호환성을 유지하면서 새로운 기능을 계속 추가 할 수 있습니까?
버전 관리는 복잡한 주제이므로 먼저 더 자세하게 목표를 정의해야합니다. 호환성을 결코 깨뜨리지 않을 것이라는 보장을 인터페이스에 가지고 있지만 새로운 기능이 무엇인지에 따라 가능하지 않을 수도 있습니다. 그래서 다른 상황과 다른 절충안이 있습니다.
귀하의 의도가 새로운 소비자에게만 새로운 기능을 제공하고 귀하의 모든 소비자가 직접 소비자 (중개자, 프레임 워크 등이 아님) 인 경우 개별 엔드 포인트 방식이 최선의 선택입니다. 휴식을 취할 수있는 기능을 추가 할 때마다 새 끝점을 만들고 새 끝점 번호를 지정한 다음 소비자가이를 확인하고 구성을 전환하도록 알려줍니다. 이 전략은 꽤 노력했지만 사실이지만 소비자에게 최신 정보를 제공해야한다는 단점이 있습니다. 또한 서비스 간 종속성이있는 경우 추적해야 할 자질구리가 될 수 있습니다. 코드가 깨진다면 (직접) 자신의 잘못이 아니라는 단점이 있습니다.
다른 주요 전략은 확장 가능한 인터페이스입니다. 내가 아는 세 가지 종류가 있습니다. 첫째, 기존의 인터페이스에서 추가 할 수있는 모든 기능이 가능할 정도로 서비스 도메인을 잘 설명하려고하는 인터페이스 유형입니다. 그게 어려운 것처럼 들린다면, 그렇습니다. 이 인터페이스를 완벽한 인터페이스라고 부를 수 있습니다. 모든 것이 완전히 기술되어 있지만 전체 도메인도 완전히 설명됩니다. "완벽한"것은 정말로 종이에 단지있다.
두 번째 다양성은 일반 인터페이스처럼 보이지만 일반 확장 점을 추가하는 유형입니다. WSDL에서 이는 xs : any, name-value 쌍 또는 유사한 것을 의미합니다. 이것을 기본 확장 가능 인터페이스라고 부를 수 있습니다. 할 일이 그리 어렵지는 않지만, 그것이 합병증이없는 것은 아닙니다. 확장 점은 인터페이스가 특정 툴링 (xs : any)에서 작동하기 어렵게 만들거나 명시 적으로 입력 및 출력 (이름 - 값 쌍)을 검증하는 기능을 일부 상실 할 수 있습니다. 버전 3 또는 4를 사용하기가 꽤 어렵게 만드는 방식으로 확장 점을 남용하는 것도 꽤 쉽습니다.
세 번째 유형은 인터페이스를 바이트 스트림으로 변환하는 유형입니다. 이 신 인터페이스를 호출 할 수 있습니다. 그것들은 정당한 이유가 없지만, 웹 서비스를 사용하고 있다면 웹 서비스를 사용하는 이유를 묻고 싶을 수도 있습니다. 어쩌면 원시 TCP / IP 또는 기본 HTTP GET / POST에 대해 생각해야합니다. 그러나 WSDL과 XSD의 복잡성에 시달리고 단지 처음부터 시작하기를 원하지만 인프라 스트럭처의 이유로 웹 서비스에 묶여 있어야합니다. 그러나 일단이 경로를 시작하면 소비자에게 서비스를 사용하는 방법과 사용하지 않는 방법을 완전히 새로운 방식으로 설명해야하며 XSD를 사용하는 경우 기본적으로 다시 사용할 수 있습니다. 네가 시작 했어.
가장 좋은 방법은 먼저 "완벽한 인터페이스"를 시도한 다음 일반 확장 성 포인트를 포기하고 추가하여 이러한 모든 옵션을 파악하고 서비스 설계에 접근하는 것입니다. 완벽한 인터페이스를 디자인하려고하면 인터페이스뿐만 아니라 서비스를 향상시킬 수있는 것들을 배우게됩니다. 그러나 시간이 걸릴 것입니다. 그리고 그 시간을 어떻게 든 제한하지 않으면 영원히 걸릴 것입니다.
진정한 신의 인터페이스가 조금 부족하다면 래퍼 인터페이스가있다. 시스템에 레이어가있는 경우 인터페이스도 레이어에 있어야합니다. 레이어 B를 변경하면 레이어 C의 모든 인스턴스가 아니라 레이어 B 만 변경하려고합니다.
가장 일반적인 전략은 wsdl에있는 객체의 네임 스페이스에 버전 관리 ID (일반적으로 yyyy / MM [/ dd])를 추가하여 WSDL을 버전화하는 것입니다.
이는 유형 (유형 / 스키마) 레벨 또는 전체 WSDL 레벨에서 수행 될 수있다. & lt; definitions & gt; 1.1 또는 & lt; description & gt; 2.0에서.
약간 날짜가 있지만 IBM Developer Works의이 링크는이 접근 방식의 근거를 제공합니다. 특히 버전을 늘릴 필요가있는 경우 :
하위 버전 호환 가능 / 변경되지 않은 변경 사항 :
조작 제거 또는 이름 변경 매개 변수를 메소드로 변경 복합 유형 변경.
일반적으로 웹 서비스 URL에 버전 문자열을 추가하여 "버전이있는 끝점"을 제공합니다. 이러한 끝점을 구현하는 코드는 차이점이 사소하고 동일한 코드로 처리 할 수 ​​있거나 코드를 복제 할 수 있거나 그 중간에있을 수있는 경우 공유 할 수 있습니다.
다른 버전 관리 된 종단점은 버전 관리가 필요한 XML 스키마도 사용할 수 있습니다.
그 중 하나는 모든 웹 서비스 작업이 버전 번호를 보유하는 추상 유형을 상속 한 유형의 매개 변수 하나만 갖도록 설계하는 것입니다. 이 접근법은 eBay 웹 서비스 플랫폼에 의해 구현됩니다. 다음과 같은 것 :
또한 http를 통해 작업하는 경우 웹 서비스 끝점 URL에 http GET 매개 변수로 버전을 추가해야 할 수 있으므로 요청한 버전을 쉽게 찾을 수 있습니다. server / service? version = 1.
모든 API에 매개 변수로 "API 버전 번호"를 추가 한 다음 웹 서비스 코드에 전략 패턴을 구현합니다. 여기서 버전 번호는 사용할 전략을 지정합니다.

네 가지 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 제품에 대한 도움을 얻을 수있는 최고의 장소입니다. 당사의 전문가 지원 팀과 지역 사회 사용자가 올바른 대답을 얻을 수 있도록 지원합니다.

REST API에는 버전 관리 전략이 필요하지 않습니다. & # 8211; 그들은 변화 전략이 필요합니다.
시스템의 지식과 경험이 향상되면 API의 변경은 불가피합니다. 이 변화의 영향을 관리하는 것은 기존 고객 통합을 해치려한다고 위협 할 때 상당한 어려움이 될 수 있습니다.
개발자는 종종 API 작업을 시작하자마자 버전 관리 전략을 결정하려고합니다. 이것은 이해할 수 있지만 항상 변화 관리의 문제를 보는 가장 현명한 방법은 아닙니다. 브랜든 바이어스 (Brandon Byers)는 Jamie Zawinski를 정규 표현식에서 파헤 쳤다.
어떤 사람들은 문제에 직면했을 때 나는 버전 관리를 사용한다고 생각합니다. & # 8221; 이제 2.1.0 문제가 있습니다.
어떻게 REST에서 리소스를 버전화할 수 있습니까?
REST는 특정 버전 관리를 제공하지 않지만 일반적으로 사용되는 접근 방식은 URI에 배치, 사용자 지정 요청 헤더 사용 또는 HTTP 수락 헤더 추가 등 세 가지 방식으로 구분됩니다.
URI를 사용하는 것은 가장 직접적인 접근법이지만 URI가 고유 한 리소스를 참조해야한다고 주장하는 REST 옹호자들을 화나게합니다. 또한 크리에이티브 라우팅 및 클라이언트 통신에 아무리 많이 투자하더라도 버전이 업데이트 될 때 클라이언트 통합을 중단 할 수 있습니다.
사용자 정의 헤더를 사용하면 버전간에 URI를 보존 할 수 있지만 실제로는 기존의 Accept 헤더에 의해 구현 된 컨텐츠 협상 동작과 중복됩니다. 클라이언트는이 헤더를 사용하여 서버가 Content-Type 헤더에서 사용 된 버전으로 응답하는 동안 지원되는 버전의 목록을 보낼 수 있습니다.
콘텐츠 협상을 통해 명확한 URL 집합을 유지할 수 있지만 다른 버전의 콘텐츠를 어딘가에 제공해야하는 복잡성을 해결해야합니다. 이러한 부담은 스택에서 API 컨트롤러로 이동하여 전송할 리소스의 버전을 파악해야하는 경향이 있습니다. 최종 결과는 클라이언트가 리소스를 요청하기 전에 어떤 헤더를 지정해야 하는지를 알아야하기 때문에보다 복잡한 API 인 경향이 있습니다.
버전 번호는 문제가 아닙니다.
REST의 논쟁적인 성격을 감안할 때, 어떤 접근 방식을 취하더라도 사용자의 눈에는 항상 틀림이 없게됩니다. 요점은 버전 번호 매기기 자체가 붉은 청어라는 점입니다.
여기서 가장 중요한 것은 여러 버전의 리소스를 제공 할 수있는 코드 기반을 관리하는 것입니다. 모든 버전을 동일한 코드 기반에 보관하면 예기치 않은 변경에 취약 해집니다. 코드베이스를 분리하면 운영 및 지원 오버 헤드가 증가합니다. 두 경우 모두 코드 확장과 복잡성 증대가 필연적 인 결과입니다.
버전 관리에 대한 엄격한 접근 방식을 사용하면 계약에 대해 필요한 확실성을 확보 할 수 있지만 시스템의 용량 변경을 저해하는 경향이 있습니다. 버전 변경으로 이어지는 요구 사항이 거부되면 버전 관리가 개선의 장애물이 될 수 있습니다. 나는 엄격한 버전 관리 정책을 가진 API를 수년간 같은 버전에 붙어있는 것으로 보았습니다. 변경 작업과 관련된 위험에 대한 합법적 인 우려 때문입니다.
버전 관리의 대안은 무엇입니까?
일관된 버전 전략은 고객에게 안정적인 계약을 제공하면서 API 변경을 관리하는 방법을 다루어야합니다. 변경 사항에 대한 응답으로 새 버전을 발행하는 것을 포함 할 필요는 없습니다.
하나의 접근법은 API 변경에서 하위 호환성을 제공함으로써 변경 가능성을 구축하는 것입니다. 이 접근 방식은 철저한 회귀 테스트를 통해 기존 고객을 변경하지 않을 것이라는 확신을 가질 수 없으므로 심각한 위험을 초래합니다.
나중에 선택적 변경을 예상하는 선택적 매개 변수 및 와일드 카드 속성과 같은 기능을 추가하여 한 단계 더 이전 버전과의 호환성을 취할 수도 있습니다. 이러한 종류의 "전달 호환성"은 고객에게 상당한 검증 부담을주는 거친 계약을 생성하는 경향이 있습니다. 최종 결과는 각 호출에 필요한 스위치와 코드의 지저분한 세트입니다.
버트 랜드 마이어 (Bertrand Meyer)의 오픈 클로즈 원칙 (Open \ Closed principle)은 소프트웨어 개체가 "확장을 위해 개방되어야하지만 수정을 위해 폐쇄되어야한다"고 제안합니다. API에 적용될 때 자원을 늘릴 수는 있지만 변경할 수는 없다는 의미입니다.
이 접근법은 하위 호환성과 관련된 회귀 위험없이보다 엄격한 버전 관리의 확실성을 제공 할 수 있습니다. 증강은 부풀어 오른 계약을 야기 할 수 있기 때문에 문제가되지 않습니다. 신중한 규율이 ​​없다면 동일한 목적을 달성하기위한 몇 가지 약간 다른 방법을 제공하는 중복 된 방법이나 리소스로 API가 산재 해 버릴 수 있습니다.
책임을 공유 할 수 있습니까?
API와 클라이언트간에 변화의 부담을 나누기 위해 더 많은 것을 할 수 있습니다. Robustness 원칙으로 종종 불리는 Postel의 법에는 "귀하가 보내는 것에 대해 당신이 받아들이고 보수적 인 입장에서 자유 주의적"이어야한다고 명시되어 있습니다. API 측면에서 이것은 소비하는 서비스에 일정한 허용 오차를 의미합니다.
예를 들어, 엄격한 직렬화 기술은 불필요하게 변경되지 않을 수 있습니다. 보다 관대 한 독자는 필요한 데이터에만 관심을 갖고 응답의 다른 모든 부분은 무시해야합니다. 이는 대부분의 변경으로 인해 통합이 중단 될 가능성이 거의 없음을 의미합니다.
또 다른 접근법은 소비자가 요청의 일부로 관심있는 데이터를 선언하는 것일 수 있습니다. 이러한 소비자 중심의 계약 패턴은 이러한 소비자 조건을 취해야하는 형식을 지정하지는 않지만 구현시 요청이 오래된 경우 API가이를 감지 할 수 있습니다.
불행하게도 이러한 접근법은 상대적으로 폐쇄 된 서비스 커뮤니티에만 적용될 수 있습니다. 공개 된 API는 거의 클라이언트 통합의 스타일을 결정할 수있는 사치를 가지고 있지 않습니다. 귀하가 서비스와 클라이언트 사이에서 유일하게 시행 할 수있는 계약은 데이터와 프로토콜로 구성됩니다.
이것이 조심스러운 규율이 현명한 변화 전략의 중심에있는 이유입니다. 좋은 API는 우연히 발생하지 않습니다. 그것은 큐레이팅되어야합니다. 변화를 관리하기 위해 취하는 어떤 접근 방식 이건간에 진화하는 계약에 대해 일관되고 능동적 인 관리가 필요합니다.
나는 창업자, 디지털 에이전시, 소프트웨어 하우스 및 기업체 전반에 걸친 20 년 이상의 개발을 주도해온 런던에 본사를 둔 기술 아키텍트입니다. 수년 동안 나는 웹 사이트와 서비스, 멀티 스크린 어플리케이션, 시스템 통합과 미들웨어를 포함하여 많은 것을 만들었습니다.
현재는 확장 가능한 SaaS 제공을 지원하고 민첩한 환경에서 아키텍처의 리더십을 제공하는 데 중점을두고 있습니다. 저는 현재 SaaS 제공 업체에서 일하고 있습니다. 넷째, 엔터프라이즈 천국으로 안내합니다. 한 번에 하나의 서비스 만 제공합니다.
트위터에서 나를 팔로우하거나 LinkedIn에서 나를 체크 아웃 할 수 있습니다.
엔티티 서비스 : 마이크로 서비스가 모노리스보다 나쁠 때.
세분화 된 엔티티 기반 서비스는 꽤 권위있는 소스에 의해 옹호되는 것 같습니다. 이것은 하나의 패턴으로 인해 단일체를 마이크로 서비스로 분해하는 많은 이점을 훼손 할 수 있기 때문에 불행합니다.
코드 커버리지를 잊어 버리십시오 - 테스트 디자인은 행동에 의해 주도되어야합니다.
테스트 커버리지 통계는 관리 팀과 코드 품질 도구에 많은 사랑을 받고 있습니다. 이들은 높은 수준의 적용 범위를 강력하고 잘 관리 된 코드 기반과 연결하는 경향이 있습니다. 그것이 틀림없이, 틀리게.
이벤트, 사가 및 워크 플로 : 서비스 간 장기 실행 프로세스 관리.
이벤트 중심 아키텍처는 관리하기 어려운 복잡한 이벤트 체인을 야기 할 수 있습니다. 이러한 문제는 공유 상태 데이터베이스 또는 워크 플로 엔진을 사용하지 않고 신중한 설계를 통해 완화 할 수 있습니다.
기술적 부채는 과도하고 게으른 은유이다.
기술적 부채는 나쁜 코드 설계가 비 기술적 인 고객에게 생산성을 저해하는 방법을 설명하는 데 유용 할 수 있지만 코드 기반에 영향을 미치는 장기적인 문제를 이해하는 데 도움이되지는 않습니다.
도메인 기반 디자인은 대규모의 민첩한 개발을 어떻게 도울 수 있습니까?
애자일 팀은 인정할 준비가되어 있든 없든 소프트웨어 모델링에 시간을 할애합니다. 도메인 기반 디자인 (Domain Driven Design)과 같은 기술을 채택하면 특히 규모가 큰이 기술을보다 효율적으로 사용할 수 있습니다.
코어 콘솔 응용 프로그램을 Windows 서비스로 실행.
Core가 Windows 서비스 생성을 직접 지원하지는 않지만 서비스로 등록되고 실행될 수있는 여러 가지 방법으로 응용 프로그램을 만들 수 있습니다.
리팩토링은 언제 다시 작성됩니까?
리팩토링은 코드를 개선하기위한 매우 구체적이고 통제 된 기술을 설명합니다. 문제는 재 작성으로 취급해야하는 코드베이스에 대한 도매 변경 사항을 설명하는 데 자주 사용된다는 것입니다.
C #을 사용하여 Azure 함수에 대한 단위 테스트 작성
도중에 몇 가지 장애가 있지만 컴파일 된 Azure 함수를 C #에서 전체 단위 테스트 범위로 작성할 수 있습니다.

Comments

Popular Posts