Top GraphQL 오류 및 수정 방법

3854 단어 graphqlerrors
최상위 GraphQL 오류 및 수리 방법
GraphQL의 오류 처리는 서버 측과 클라이언트 도구에서 모두 다르다.요청한 오류를 디버깅하기 위해 HTTP 상태 코드를 더 이상 볼 필요가 없습니다.이것은 우리로 하여금 디버깅 오류에 더 많이 참여하게 하지만, GraphQL의 오류는 하나의 구조가 있기 때문에, 우리는 그것을 연구하여 어떻게 디버깅하고 복구하는지 보게 할 것이다.
일반적인 GraphQL 쿼리를 살펴보겠습니다.
query {
  author {
    id
    name
  }
}
위의 질의에 대한 응답은 다음과 같습니다.
  • data
  • errors 또는
  • 둘 다.
  • {
      "data": [{ id: 1, name: "Praveen"}],
      "errors": []
    }
    
    GraphQL 응답의 최상위 오류 객체
    응답이 errors 대상과 data 대상을 포함할 때 요청한 부분에 대한 정확한 응답을 의미할 수 있습니다.errors 대상을 깊이 연구하면 조회의 어느 부분이 잘못되었는지 더욱 잘 이해할 수 있다.
    오류 유형을 식별하는 것은 그것들을 신속하게 복구하는 데 도움이 될 것이다.클라이언트가 GraphQL 서버와 통신할 때 이런 종류의 오류가 발생할 수 있습니다.

    서버 문제/네트워크 오류


    위의 모든 오류는 GraphQL 오류 범주에 속하며 응답 상태 코드는 200입니다.GraphQL 서버에 연결하려고 시도할 때 서버 종료나 시간 초과 등으로 네트워크 오류가 발생하면 응답은 4xx 또는 5xx의 상태 코드가 됩니다.
    서버의 응답이 200이 아닌 경우 다음과 같은 이유로 응답이 실패합니다.
  • 오류 요청(400)
  • 무단 (401)
  • 게이트웨이 오류(5xx)
  • 요청이 오류를 포함할 수도 있지만, 원본 응답은 200을 통해 발송할 수 없습니다.이 비표준 응답은 서버와 함께 네트워크 오류가 있는지 등 잠재적인 문제를 검사해야 합니다.

    클라이언트 질문 - GraphQL 쿼리의 검증 규칙


    GraphQL은 검색을 실행하기 전에 모든 검색을 검증하는 강력한 유형입니다.그룹 규칙에 따라, 만약 조회가 잘못되면, 조회를 거부할 수 있습니다.
    유효성 검사 규칙을 다시 다음으로 분할할 수 있습니다.
  • 잘못된 형식의 쿼리
  • 문법 또는 패턴 논리
  • 변수와 세션이 올바르게 정의되지 않았습니다.
  • 예를 들면 다음과 같습니다.
    {
      "errors": [
        {
          "extensions": {
            "path": "$.variableValues",
            "code": "validation-failed"
          },
          "message": "unexpected variables in variableValues: products"
        }
      ]
    }
    
    variableValues의 예상치 못한 변수: id
    이것은 클라이언트가 정의되지 않은 변수를 사용하여 요청을 할 때 발생하는 전형적인 오류입니다.GraphiQL 등 GUI 도구를 사용할 때 흔히 볼 수 있는 악몽은 변수 UI에 이전에 검색한 변수가 사용한 잔여가 있다는 것이다.
    graphql js 서버validation rules의 원본 코드를 읽고 조회를 실행하기 전에 진행된 각종 조회 검증을 이해합니다.
    검증 오류는 클라이언트에게 어떤 데이터도 되돌려주지 않으며, 실행 오류는 일부 데이터 집합을 되돌려줍니다.이 조작은 어느 정도 완성될 수 있으나, 특정 필드나 조회의 특정 부분의 성능이 비교적 느리기 때문에 일부 데이터 집합을 초래할 수 있다.

    최상위 오류


    기본 오류는 message, locationspath입니다.규범화된 작업 초안에 따라 extensions키를 통해 사용자 정의 데이터를 발송할 수 있다.

    필드 수준 오류


    {
     “errors”: [{
        “extensions”: {
        “path”: “$.selectionSet.dogs.selectionSet.name”,
        “code”: “validation-failed”
       },
       “message”: “field \”name\” not found in type: ‘dogs’”
     }]
    }
    
    위의 응답에서 extensions 대상의 errors 키를 볼 수 있습니다. 이 키는 오류 원인에 대한 더 많은 메타데이터를 포함합니다.기술적으로 이 오류는 존재하지 않는 필드를 사용했기 때문입니다. (Auth나 schema에 이 필드가 없기 때문입니다.)

    GraphQL 구독 오류


    GraphQL 서버에 연결할 때 자주 발생하는 또 다른 오류는 웹 소켓에 연결하여 실시간 구독을 하는 것입니다.
  • 웹소켓 연결을 초기화할 수 없습니다.웹소켓 연결의 URL을 확인해야 합니다.웹소켓 URL은 ws 또는 wss로 시작하는 것이지 https로 시작하는 것이 아닙니다.
  • 잘못된 http 업그레이드 (http가 웹소켓 연결에 사용되고 ws에 올바른 연결 분할을 설정하지 않았을 때 발생할 수 있음)
  • 권한 수여 헤더에 connectionParams를 전달하지 않았습니다.만약 JWT 영패를 사용한다면 GraphQL 클라이언트를 사용하여connectionParams를 통해 전달해야 합니다.
  • 리소스

  • Handling GraphQL Errors with React
  • 좋은 웹페이지 즐겨찾기