Quiz: Contracts and Version Compatibility
한국어 원문으로 표시합니다.
파트너가 응답의 region 을 market 으로 이름만 바꿨다. 우리 수집기에서 가장 먼저 일어나는 일은?
rec.get("region")이 None 을 돌려주어 예외 없이 지역별 집계가 미분류로 모인다- KeyError 가 나면서 수집기가 곧바로 멈추므로 경보가 울린다
- HTTP 응답이 400 으로 바뀌어 통합 자체가 끊긴다
- JSON 파서가 모르는 필드를 만나 파싱 단계에서 실패한다
소비자 계약에 파트너가 내주는 모든 필드를 적어 두면 무슨 일이 생기는가?
- 계약 대조기가 느려져 파이프라인 시간이 늘어난다
- 모르는 필드를 허용할 수 없게 되어 파트너가 필드를 더할 때마다 응답이 거절된다
- 우리가 읽지도 않는 필드가 바뀔 때마다 시험이 실패해 소음이 늘고, 결국 사람이 시험을 끈다
- 파트너의 OpenAPI 명세와 어긋나 계약 자체가 무효가 된다
응답의 status 열거값에 on_hold 가 하나 늘었다. 소비자 관점에서 이 변경은?
- 안전하다. 값이 는 것은 필드가 는 것과 같아서 무시하면 된다
- 깨뜨린다. 우리 분기에 없는 값이라 어느 갈래에도 안 들어가거나 엉뚱한 기본값이 된다
- 안전하다. 열거값은 문자열이므로 타입이 바뀐 것이 아니다
- 깨뜨린다. 열거값이 늘면 JSON 스키마 검증이 파싱 단계에서 실패하기 때문이다
요청 쪽에 선택 필드가 하나 늘었다. 우리 클라이언트는?
- 깨진다. 우리가 그 필드를 안 보내므로 서버가 요청을 거절한다
- 깨진다. 요청 본문의 필드 수가 달라지면 서명이나 지문이 어긋난다
- 안전하다. 다만 응답에 필드가 느는 것과 달리 요청 쪽은 반드시 코드를 고쳐야 한다
- 안전하다. 안 보내면 그만이고 우리 코드는 아무것도 고치지 않아도 된다
amount 가 정수 12300 에서 문자열 "12300.00" 으로 바뀌었다. 정규화할 때 피해야 할 것은?
float("12300.00")로 바꾼 뒤 반올림해 정수로 만든다- 점을 기준으로 잘라 정수부만 정수로 옮기고, 소수부가 0 이 아니면 오류를 낸다
- 별칭 표와 정규화 함수를 한곳에 모아 두고 내부에서는 한 가지 모양만 쓴다
- 구판과 신판을 모두 받아들이도록 타입을 보고 갈라서 처리한다
계약 시험을 파이프라인에 넣을 때, 출력에 반드시 함께 남겨야 하는 것은?
- 시험을 돌린 사람의 계정 이름. 누가 배포했는지 추적해야 하기 때문이다
- 어느 주소에 대고 쟀는지. 샌드박스와 운영이 서로 다른 판을 돌리고 있을 수 있기 때문이다
- 파트너의 OpenAPI 명세 전문. 나중에 차이를 다시 계산해야 하기 때문이다
- 응답 전체의 원본. 위반이 없을 때도 보관해야 감사에 대응할 수 있기 때문이다