앱 버전 관리 전략
앱 버전 전략
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
애플리케이션 버전 관리 전략은 무엇입니까? [복제]
이 질문에는 이미 답변이 있습니다.
최고의 응용 프로그램 버전 전략에 대한 SO 커뮤니티의 의견을 얻는 데 관심이 있습니다.
애플리케이션의 버전 번호를 어떻게 추적합니까? 해당 버전의 각 숫자 / 문자의 의미에 대한 공식적인 정의가 있습니까?
앱의 버전이 다른 숫자 / 문자열은 앱의 의미가 무엇입니까?
앱에서 자동화 된 업데이트 시스템 (예 : Sparkle)을 사용하고 있으며 귀하의 행동 방식이 얼마나 좋았습니까?
베타 테스터 또는 앱의 시험판 테스터를위한 별도의 업데이트 절차가 있습니까?
gnat, MichaelT, Kilian Foth, GlenH7, Rein Henrichs Apr 29 '13 at 2:42에 의해 중복으로 표시됩니다.
이 질문은 전에 질문을 받았고 이미 답변이 있습니다. 이러한 답변으로 귀하의 질문에 완전히 답변하지 못하면 새로운 질문을하십시오.
stackoverflow에서 마이 그 레이션 5 월 18 일 13시 48 분.
이 질문은 전문적이고 열광적 인 프로그래머를위한 사이트에서 왔습니다.
애플리케이션의 버전 번호를 어떻게 추적합니까? 해당 버전의 각 숫자 / 문자의 의미에 대한 공식적인 정의가 있습니까?
앱의 버전이 다른 숫자 / 문자열은 앱의 의미가 무엇입니까?
나는 다음을 사용한다 :
Major - Major 버전은 제품의 확실한 릴리스입니다. 기능에 중대한 변화가있을 때 증가했습니다.
마이너 버전은 새 기능이나 주요 버그 수정이 추가 될 때마다 증가합니다.
업그레이드 / 패치 - 업그레이드는 제품을 최신 버전의 제품으로 대체하는 것을 의미합니다. 지정된 주요 릴리스에서 업그레이드가 제공되는 경우에만 증가됩니다. 패치 버전은 0으로 시작하고 버그가 해결 된 경우에만 증가합니다.
빌드 번호 - 새 빌드가 생성되면 빌드 번호가 증가합니다.
앱에서 자동화 된 업데이트 시스템 (예 : Sparkle)을 사용하고 있으며 귀하의 행동 방식이 얼마나 좋았습니까?
우리는 야간 빌드라고 부르는 야간에 앱을 자동으로 빌드하는 빌드 도구를 사용하며 빌드가 생성 될 때마다 빌드 번호가 증가합니다.
베타 테스터 또는 앱의 시험판 테스터를위한 별도의 업데이트 절차가 있습니까?
매일 아침 BAT (빌드 수락 테스트)를 호출하고 야간 빌드를 확인하는 야간 빌드에 대한 테스터 테스트.
먼저 "최고의"전략에 동의하지 않는 것 같습니다. 현재 프로젝트에서 내 경험 만 공유 할 수 있습니다.
시스템 버전은 빌드 특성에서 수동으로 정의됩니다. 팀이 새 릴리스에 동의하면 발생합니다. 추가적인 버전 관리로서 우리는 CI 빌드에 의해 자동으로 생성되는 빌드 번호를 사용합니다.
Ubuntu 명명 체계 YY. MM. version. patch_buildNumber를 대충 따릅니다. Major. Minor 버전 관리가 고객의 기대를 망쳐 놨음을 발견했습니다.)
관리자가 응용 프로그램을 롤아웃해야하기 때문에 자동 업데이트가 없습니다.
테스트 릴리스는 GA 출시보다 더 자주 발생하지만 모두 지원해야합니다.
나는 많은 버전 시스템을 테스트했고, 이제는이 버전에 꽤 만족한다.
Major는 수동으로 설정되고 주요 개선 사항을 포함하는 버전을 참조하십시오. Minor는 수동으로 설정되며 업그레이드 및 유지 관리 릴리스를 참조하십시오. 수정 사항 개정은 자동으로 생성되며 저장소의 정확한 개정을 참조합니다.
마지막 하나는 버전 관리에있어 매우 유연합니다. 여러 클라이언트에 여러 버전을 제공 할 수 있으며 디버그 및 디버깅이 가능합니다. repos에서 특정 버전을 가져 와서 쉽게 수정 한 다음 트렁크로 다시 병합하십시오.
빌드, 패키징 & amp; 게시는 완전히 자동화되어 있습니다. 유일한 수동 작업은 마지막 패키지를 FTP로 프로덕션 서버로 옮기는 경우입니다. 우리는 생산 현장에서 쓰레기를 전달하지 않도록 통제권을 유지하려고합니다. 얼리 어답터가 출시 노트를 읽고 버전을 다운로드하여 사용할 수있는 예비 단계로 이동합니다. 특정 버그에 직면 한 고객은이 버전 중 하나를 사용하여 고정 된 버전을 매우 빨리 얻을 수 있습니다.
오픈 소스 라이브러리를위한 시맨틱 버저 닝 (Semantic Versioning)을 사용하고 있으며 다른 라이브러리와도 작업하기가 훨씬 쉽다. 버전 변경이 의미하는 바를 이해할 수있는 공통 기반을 제공합니다. 도서관은 여전히 베타 버전입니까? 버그 수정을위한 릴리즈인가요? API 변경 사항이 깨지십니까?
이것은 기본적으로 대부분의 오픈 소스 프로젝트에서 이미 사용 된 최상의 버전 관리 방식을 체계적으로 정리 한 것입니다.
앱 버전 전략
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
내부 테스트에 TestFlight를 사용할 때 iOS 앱 버전 관리 전략은 무엇입니까?
시맨틱 버전 관리를 사용하여 선적 된 빌드를 태그하는 iOS 앱이 있습니다. 또한 Apple의 TestFlight를 사용하여 내부 빌드를 테스트 / 품질 보증 팀에 보냅니다.
내부 빌드를 작성하려면 iTunes Connect에 빌드를 업로드해야합니다. 테스트 빌드와 릴리스 빌드를 iTunes Connect에 구분하지 않으며, iTunes Connect는 이전에 업로드 한 버전을 덮어 쓸 수 없습니다. 따라서 내부 테스트를 위해 새 빌드를 추가 할 때마다 버전 번호 (물론 패치 번호 (X. X. X))를 지정해야합니다.
이것은 우리의 버전 번호가 업데이트 사이에 많이 뛰어 오른 것처럼 보이지만, 사용자에게는 예외입니다. 예를 들어 이것이 빌드 기록 인 경우 :
. 사용자는 대담한 버전 만보고 있으며 출시 기록은 이상하게 보입니다.
이 문제를 피하는 좋은 방법은 테스트 빌드에 v1.1.0-beta와 같은 베타 버전을 사용하는 것이지만 iTunes Connect는 X. X.X가 아닌 버전 문자열을 거부합니다.
내부 테스팅 / 품질 보증을 위해 TestFlight를 계속 사용하고 사용자에게 갭 - 채워진 버전 히스토리의 출현을 피하는 방법이 있습니까?
빌드 버전에서 내부 네 번째 숫자를 사용합니다. iTunes가 여전히이를 수용한다고 생각합니다. 예 : 그것은 버전 1.0.0 일지 모르지만 빌드는 테스트 할 87 번째 내부 빌드를 나타내는 1.0.0.87 일 수 있습니다. 앱에 표시 할 때 마지막 번호를 울리도록 선택할 수 있지만 사람들은 일반적으로 신경 쓰지 않습니다.
나는 이것을 이해하기 쉽고 대부분의 장소에서 받아 들였습니다.
버전 번호와 비교하여 빌드 번호에 충분한 크레딧이 부여되지 않았습니다.
앱 버전 전략
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
모범 사례 : 소프트웨어 버전 관리 [닫힘]
여가 시간에 개발 한 소프트웨어를 재미있게 버전을 출시하는 방법에 대한 가이드 라인이나 표준 모범 사례가 있습니까? 그렇지만 일부 사람들은이 소프트웨어를 사용하게 될 것입니다. 버전 1에 대해 (예 : 버그 수정, 지원 등)에 대해 알 수 있도록 해당 소프트웨어의 버전을 변경해야한다고 생각합니다.
하지만 버전 관리는 어디에서 시작해야합니까? 0.0.0? 또는 0.0? 그리고 숫자를 늘리는 방법은? 주요한 방출. 마이너 변화? 버전 관리 시스템에 대한 커밋이 다른 버전이되어서는 안됩니까? 또는 생산적인 방식으로 사용되는 버전에만 해당 되는가?
bummi, animuson & # 9830;에 의해 주로 의견 기반으로 마감되었습니다. 8 월 2 일 13시 43 분.
많은 좋은 질문은 전문가의 경험을 토대로 어느 정도 의견을 제시하지만, 이 질문에 대한 답변은 사실, 참고 문헌 또는 특정 전문 지식보다는 의견에 거의 근거를 두는 경향이 있습니다. 이 질문을 도움말 센터의 규칙에 맞게 수정하려면 질문을 수정하십시오.
Flexo & # 9830; 3 월 21 일 21:32
이 질문은 역사적인 의미가 있기 때문에 존재하지만이 사이트에 대한 주제에 관한 좋은 질문으로 간주되지 않으므로 여기에서 비슷한 질문을 할 수있는 증거로 사용하지 마십시오. 이 질문과 답변은 고정되어 있으며 변경할 수 없습니다. 자세한 정보 : 도움말 센터.
12 답변.
"릴리스"첫 번째 버전이 어떤 식 으로든 불완전하다는 것을 안다면, 버전 1부터 시작해야합니다.
버전을 증가시키는 방법은 귀하의 선택에 달려 있지만 메이저, 마이너, 빌드 번호 매기기를 가이드로 사용하십시오.
소스 컨트롤에 커밋 할 모든 버전을 다른 버전으로 가질 필요는 없습니다. 곧 버전 번호가 곧 커질 것입니다. 새 버전을 외부 세계에 출시 할 때만 버전 번호를 증가시켜야합니다 (어떤 방식 으로든).
따라서 버전 1.0.0.0에서 버전 2.0.0.0으로 주요 변경 사항을 변경하면 (예 : WinForms에서 WPF로 변경) 더 작은 변경을하면 1.0.0.0에서 1.1.0.0으로 이동합니다 (png 파일에 대한 지원이 추가됨). 사소한 변경을하면 1.0.0.0에서 1.0.1.0로 변경하십시오 (버그 수정).
모든 체크 인 / 커밋에 대해 증가 할 빌드 번호로 최종 번호를 상세히 사용하고 싶다면 (하지만 너무 멀다고 생각합니다).
x. y.z 종류의 버전 관리를 사용합니다.
엑스 메이저 릴리스.
y - 부 릴리스.
z - 빌드 번호.
나는 기본적으로이 패턴을 따른다.
준비가되면 소스 레포에서 코드를 분기하고 0.1.0 태그를 지정하고 0.1.0 브랜치를 만들고 헤드 / 트렁크는 0.2.0 스냅 샷 또는 이와 비슷한 코드가됩니다.
나는 트렁크에만 새로운 기능을 추가하지만 지점에 대한 백 포트 수정은 0.1.1, 0.1.2,.
제품이 기능 완료로 간주되고 주요 단점이없는 경우 버전 1.0.0을 선언합니다.
그때부터 모든 사람이 메이저 버전을 늘릴시기를 결정할 수 있습니다.
내 응용 프로그램에이 규칙을 사용합니다.
. y = 기능 번호, 0-9. 변경 사항에 버그 수정이 있거나없는 새로운 기능이 포함 된 경우이 숫자를 늘리십시오. z = 핫픽스 번호, 0-
. 변경 사항에 버그 수정 만 포함 된 경우이 숫자를 늘리십시오.
새로운 응용 프로그램의 경우 버전 번호는 1.0.0으로 시작합니다. 새 버전에 버그 수정 만 포함 된 경우 버전 번호가 1.0.1이되도록 핫픽스 번호를 늘리십시오. 새 버전에 버그 수정이 있거나없는 새로운 기능이 포함 된 경우 기능 번호를 늘리고 핫픽스 번호를 0으로 재설정하여 버전 번호가 1.1.0이되도록하십시오. 기능 번호가 9에 도달하면 기본 버전 번호를 높이고 기능 및 핫픽스 번호를 0으로 재설정하십시오 (2.0.0 등)
우리는 어디에서 a. b.c. d를 사용합니다.
a - major (클라이언트에 대한 전달 증가) b - minor (클라이언트에 전달시 증가) c - 개정 (내부 릴리스에서 증가) d - build (순항 제어에 의해 증가)
A. B.C 접근 방식의 또 다른 예는 Eclipse 번들 버전 관리입니다. Eclipse 번들에는 네 번째 세그먼트가 있습니다.
이클립스에서 버전 번호는 4 개의 세그먼트로 구성된다 : 각각 3 개의 정수와 각각 major. minor. service. qualifier라는 문자열. 각 세그먼트는 다른 의도를 캡처합니다.
주요 세그먼트는 API에서 파손을 나타냅니다. 마이너 세그먼트는 "외부에서 볼 수있는"변경 사항을 나타냅니다. 서비스 세그먼트는 버그 수정과 수정 프로그램 세그먼트가 특정 빌드를 나타내는 개발 스트림 변경을 나타냅니다.
또한 날짜 버전 체계가 있습니다 (예 : YYYY. MM, YY. MM, YYYYMMDD).
첫 번째 모습은 출시일에 대한 인상을주기 때문에 매우 유익합니다. 그러나 나는 제품 수명주기에서 제품의 정확한 지점을 항상 알고 싶어하기 때문에 x. y.z 체계를 선호합니다 (Major. minor. release)
기본적인 대답은 "It depends"입니다.
버전 관리에 대한 귀하의 목표는 무엇입니까? 많은 사람들이 version. revision. build를 사용하며, dev. revision이 아니라 공개 버전이기 때문에 version. revision을 전 세계에 광고합니다. 체크인 '버전'을 사용하면 버전 번호가 커지게됩니다.
프로젝트를 계획하고 있다면 중요한 변경 사항, 버그 수정 또는 기능 / 기능이 포함 된 릴리스의 사소한 변경 및 증가 버전으로 릴리즈에 대한 개정을 증가시킵니다. 베타 또는 야간 빌드 유형 릴리스를 제공하는 경우 빌드를 포함하도록 버전을 확장하고 모든 릴리스에서 버전을 증가 시키십시오.
그래도 하루가 끝나면 그것은 당신에게 달려 있으며 당신에게 의미가 있어야합니다.
Mahesh가 말했듯이 : x. y.z 종류의 버전 관리를 사용합니다.
x - 메이저 릴리스 y - 마이너 릴리스 z - 빌드 번호.
당신은 아마 datetime을 추가하기를 원할 것입니다. 아마 z 대신에.
다른 릴리스가있을 때 마이너 릴리스를 증가시킵니다. 주요 릴리즈는 대개 0 또는 1로 유지되며, 실제로 변경 사항을 적용 할 때 변경됩니다 (소프트웨어가 이전 릴리스와 호환되지 않는 지점에 있거나 전체 프레임 워크를 변경 한 경우)
당신은 당신이 항상 다른 사람들이하고있는 것을 볼 수 있는지 확인할 수 있습니다. 오픈 소스 소프트웨어는 리포지토리에 대한 액세스를 허용하는 경향이 있습니다. 예를 들어 SVN 브라우저에서 svn. doctrine-project. org를 가리키고 실제 프로젝트에서 사용 된 버전 시스템을 살펴볼 수 있습니다.
버전 번호, 태그, 모든 것이 있습니다.
우리는 다음과 같은 a. b.c 접근법을 따른다 :
응용 프로그램에서 몇 가지 주요 변경 사항이있는 경우 '증가'를 선택하십시오. 우리는 1.1 응용 프로그램을 3.5로 업그레이드하는 것과 같습니다.
새로운 CR이나 향상과 같은 사소한 변경 사항이있는 경우에는 'b'증분이 구현됩니다.
코드에 몇 가지 결함 수정 사항이있는 경우 'increment'c '.
최저 (비 핫픽스) 세그먼트에서 버전 관리를 시작합니다. 이 세그먼트를 10으로 제한하지 않습니다. 빌드를 추적하지 않는 한 증분을 적용 할시기를 결정하면됩니다. 품질 보증 단계가있는 경우 품질 보증을 통과하고 출시 될 때 가장 낮은 세그먼트에 증분을 적용한 다음 다음 세그먼트를 적용 할 수 있습니다. 주요 동작 / UI 변경 사항의 최상단 세그먼트를 그대로 둡니다.
당신이 나를 좋아한다면, 당신은 소프트웨어의 진행 속도에 맞추기 위해 그것을 방법의 하이브리드로 만들 것입니다.
나는 가장 받아 들여지는 패턴이 a. b.c라고 생각한다. 특히 QA / 규정 준수가 혼합 된 경우에는. b.c. d입니다. 나는 주류를 위해 포기했던 버전의 정규적인 부분 인 데서 너무 많은 단서를 가지고있다.
빌드를 추적하지 않기 때문에 핫픽스가 포함되어 있지 않으면 a. b.c 패턴을 사용하고 싶습니다. 핫픽스를 적용해야 할 때 매개 변수 d를 날짜와 함께 적용합니다. 나는 시간 매개 변수를 d로 채택했습니다. 왜냐하면 일이 실제로 생산에서 날아갈 때 항상 잠재력이 있기 때문입니다. 생산 수정을 위해 분기 할 때만 d 세그먼트 (YYYYMMDDHHNN)를 적용합니다.
나는 개인적으로 va. b revc의 소프트웨어 계획에 반대하지 않을 것이다. 여기서 c는 YYYYMMDDHHMM 또는 YYYYMMDD이다.
그 모든 말. 구성하고 실행할 도구를 방해 할 수 있다면 버전 관리의 의견을 마샬링해야하는 두통에서 벗어날 수 있으며 "도구 사용"이라고 말할 수 있습니다. 개발 프로세스의 모든 구성원이 일반적으로 매우 순응하기 때문에.
귀하의 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; 그리고 나는 모든 귀가 없습니다. 문제는 심지어 시끄러운 토론에서 이성을 표명하는 목소리가 실제로 가장 좋은 접근 방식에 대한 의문을 남기므로 나는 타협에 도달했습니다. & # 20620;
다음은 선택할 수있는 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에서 다시 추출되었으므로 초기로드시 모든 위반 사항을 소스에로드하지 않아도된다는 의미입니다 (데이터 세트가 확장됨에 따라 지속될 수 없음). 이렇게하면 여러 개의 발신 트래픽이 절약되고 사이트를로드하는 측면에서 사람들의 속도가 빨라지지만 결국에는 더 많은 작업이 필요하게됩니다. 계속 지켜봐.
끝내고.
분명히 나는 모든 것이 잘못되었지만 정직하게 여기에 대해 약간의 혀를 썼다. 더 많이 읽으면할수록 더 많은 질문이 제기 될수록 모든 경로가 어떤 방향 으로든 더 틀리게 보인다. 실제로 저는 구현의 측면이 & # x201; C; wrong & # x201;라고 불리우는 것을 잘 알고 있습니다. (적어도 두세 가지로 생각할 수 있습니다.) 그리고 자연스럽게 그 영향에 대한 잠재적 인 맹공격에 대비하고 있습니다. 문제는 각각의 옵션이 솔직하게 작동한다는 것입니다. 모든 실제적인 목적을 위해 서로 잘 작동합니다.
최종 결정을 내리고 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를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
내부 테스트에 TestFlight를 사용할 때 iOS 앱 버전 관리 전략은 무엇입니까?
시맨틱 버전 관리를 사용하여 선적 된 빌드를 태그하는 iOS 앱이 있습니다. 또한 Apple의 TestFlight를 사용하여 내부 빌드를 테스트 / 품질 보증 팀에 보냅니다.
내부 빌드를 작성하려면 iTunes Connect에 빌드를 업로드해야합니다. 테스트 빌드와 릴리스 빌드를 iTunes Connect에 구분하지 않으며, iTunes Connect는 이전에 업로드 한 버전을 덮어 쓸 수 없습니다. 따라서 내부 테스트를 위해 새 빌드를 추가 할 때마다 버전 번호 (물론 패치 번호 (X. X. X))를 지정해야합니다.
이것은 우리의 버전 번호가 업데이트 사이에 많이 뛰어 오른 것처럼 보이지만, 사용자에게는 예외입니다. 예를 들어 이것이 빌드 기록 인 경우 :
. 사용자는 대담한 버전 만보고 있으며 출시 기록은 이상하게 보입니다.
이 문제를 피하는 좋은 방법은 테스트 빌드에 v1.1.0-beta와 같은 베타 버전을 사용하는 것이지만 iTunes Connect는 X. X.X가 아닌 버전 문자열을 거부합니다.
내부 테스팅 / 품질 보증을 위해 TestFlight를 계속 사용하고 사용자에게 갭 - 채워진 버전 히스토리의 출현을 피하는 방법이 있습니까?
빌드 버전에서 내부 네 번째 숫자를 사용합니다. iTunes가 여전히이를 수용한다고 생각합니다. 예 : 그것은 버전 1.0.0 일지 모르지만 빌드는 테스트 할 87 번째 내부 빌드를 나타내는 1.0.0.87 일 수 있습니다. 앱에 표시 할 때 마지막 번호를 울리도록 선택할 수 있지만 사람들은 일반적으로 신경 쓰지 않습니다.
나는 이것을 이해하기 쉽고 대부분의 장소에서 받아 들였습니다.
버전 번호와 비교하여 빌드 번호에 충분한 크레딧이 부여되지 않았습니다.
Comments
Post a Comment