GraphQL 스터디/SPQR 라이브러리

GraphQL Validation 추가

막이86 2023. 11. 10. 19:08
728x90

Validation의 필요성

  • 사용자 등록과 같은 API를 작성할 때 필수 값이 없으면 DB오류나 의미 없는 데이터가 생성 될수 있음

사용자 등록 API

  • 사용자 이름은 공백이면 의미 없는 데이터가 생성
data class User(
    val id: Long?,
    val name: String?
)

@GraphQLMutation(name = "createUser", description = "사용자 등록")
fun createUser(user: User): User {
    return user
}
  • 의미 없는 사용자 추가
mutation {
  createUser(user: {
    id: 1
    name: ""
  }) {
    id
    name
  }
}
  • 응답
{
  "data": {
    "createUser": {
      "id": 1,
      "name": ""
    }
  }
}

사용자 등록시 이름을 입력하도록 Validation 추가

  • 공백 체크 코드
data class User(
    val id: Long?,
    @get:NotBlank(message = "이름은 공백일 수 없습니다.")
    val name: String?
)
  • GraphQL Service에 @Validated 추가
  • API @Valid 추가
@Service
@GraphQLApi
@Validated
class DemoService {
    @GraphQLQuery(name = "getUser", description = "사용자 조회")
    fun getUser(): User {
        return User(id = 1, name = "최치환")
    }

    @GraphQLQuery(name = "getErrorUser", description = "사용자 조회 실패")
    fun getErrorUser(id: Long): User {
        throw Exception("사용자 조회 실패")
    }

    @GraphQLMutation(name = "createUser", description = "사용자 등록")
    fun createUser(@Valid user: User): User {
        return user
    }
}
  • 응답 결과
    {
      "errors": [
        {
          "message": "이름은 공백일 수 없습니다.",
          "locations": [],
          "extensions": {
            "code": "createUser.user.name",
            "detailMessage": ""
          }
        }
      ],
      "data": {
        "createUser": null
      }
    }
    

코드 참고

https://github.com/clghks/graphQL-Error

728x90

'GraphQL 스터디 > SPQR 라이브러리' 카테고리의 다른 글

GraphQL Custom Validation 추가  (0) 2023.11.10
GraphQL 오류 처리  (0) 2023.11.10