Echolot
명령줄과 CI

echolot graphql diff

두 GraphQL 스키마를 비교하고, 호환되지 않는 변경이 있으면 빌드를 실패시킵니다.

echolot graphql diff는 한 GraphQL 스키마에서 다른 스키마로 바뀐 내용을 나열하고 변경마다 등급을 매기므로, 변경이 API의 클라이언트를 깨뜨리기 전에 빌드를 멈출 수 있습니다.

echolot graphql diff <old> <new> [--fail-on <level>] [--json]

<old>와 <new>는 변경 전과 후의 스키마입니다. SDL 파일(.graphql)이나 인트로스펙션 결과(JSON)이며, 섞어서 써도 됩니다.

두 스키마 비교

git show main:specs/shop.graphql > before.graphql
echolot graphql diff before.graphql Alpenglow.echolot/specs/shop.graphql
Breaking (1)
  The field Product.weightGrams was removed
Dangerous (1)
  The argument inStock was added to Query.search
Safe (1)
  The field Product.colors was added
등급의미
Breaking이전에 작동하던 쿼리가 이제 실패할 수 있습니다. 타입, 필드, 입력 필드, 인수, 열거형 값, 지시문의 제거. 필수 인수나 입력 필드의 추가. 필드 타입의 변경(출력을 non-null로 바꾸는 경우 제외). 유니온 멤버나 인터페이스의 제거.
Dangerous쿼리는 계속 작동하지만 동작이 달라질 수 있습니다. 선택 인수의 추가, 기본값 변경, 열거형 값이나 유니온 멤버의 추가, 새 인터페이스, 지원 중단 처리.
Safe기존 쿼리가 알아챌 수 없는 변경입니다. 타입, 필드, 선택 입력 필드, 지시문의 추가. 설명 변경. 지원 중단 해제.

--json은 변경 사항을 JSON 배열로 출력하며, 각 항목에는 severity, path, message가 있습니다.

[
  {
    "message" : "The field Product.weightGrams was removed",
    "path" : "Product.weightGrams",
    "severity" : "breaking"
  },
  {
    "message" : "The argument inStock was added to Query.search",
    "path" : "Query.search(inStock)",
    "severity" : "dangerous"
  }
]

옵션

옵션의미
--fail-on <level>breaking(기본값)은 호환되지 않는 변경이 있으면 1로 종료합니다. dangerous는 호환되지 않는 변경과 위험한 변경이 있으면, none은 절대 실패하지 않습니다.
--json변경 사항을 JSON으로 출력합니다.

종료 코드

코드조건
0--fail-on 등급 이상의 변경이 없습니다.
1--fail-on 등급 이상의 변경이 있거나, 스키마를 읽을 수 없습니다.

실행 중인 서버에서 스키마를 가져오려면 앱의 GraphQL 요청으로 인트로스펙션 쿼리를 보내거나 GraphQL 요청을 참조하십시오.

이 페이지에서