2017-03-25 3 views
0

제 질문은 일종의 모범 사례입니까?서버 측에서 GraphQL enums 유효성 검사에 대한 응답

MongoDB를 데이터 저장소로 사용하여 API로 GraphQL을 사용하는 백엔드를 만듭니다. graphql이 쿼리, 특히 수신 된 enum을 확인한다는 것을 알고 있습니다.
제 질문은 graphql 입력 열거 형 검증에 의존하는 것으로 충분합니까 아니면 DB 수준에서 유효성 검사를 추가해야합니까?

나는 이것이 나쁜 습관과 불필요한 코드 중복으로 보였기 때문에 이것을 묻습니다. gum 스키마와 mongoDB 모델에서 가능한 열거 형을 두 곳으로 정의 할 수 있습니다.

예컨대 :

GQL 스키마 : 몽구스의
enum EyeColor {
BROWN
BLUE
GREEN
}

모델 :
new mongoose.Schema({
eyeColor: { type: String, enum: ["BROWN", "BLUE", "GREEN"] }
});


내가 놓친 게 뭔가? graphql을 사용하여 열거 형을 선언하는 좋은 방법이 있습니까?

또는 graphql에만 의존하는 것이 좋습니다.

const EYE_COLOR = { 
    BROWN: 'BROWN', 
    BLUE: 'BLUE', 
    GREEN: 'GREEN' 
}; 

export { 
    EYE_COLOR 
}; 

다음 몽구스 모델 파일 :

import { EYE_COLOR } from '../../consts/EyeColor.const'; 
import _ from 'lodash'; 
new mongoose.Schema({ 
eyeColor: { 
    type: String, 
    enum: _.values(EYE_COLOR) 
    } 
}); 

그리고 graphql 당신은 동적으로 할 수

답변

1

나는 더 나은 방법은 const를 파일 EyeColor.const.js에 열거를 정의하는 것입니다 생각 열거 형을 포함하는 String을 만듭니다.

enum EyeColor { 
BROWN 
BLUE 
GREEN 
} 

0에서 개체를 가져옵니다.(코드를 작성하지 않았지만 매우 간단해야합니다. const의 각 키가 열거 형의 다른 항목을 작성해야합니다.)

이렇게하면 const 정의가 하나만 있습니다.

1

"우수 사례"는 향후 데이터베이스 사용 방식에 따라 달라집니다. GraphQL 서버와 직접 연결되어 있습니까 (해당 GraphQL API를 통해서만 액세스 할 수 있습니까)? 그렇다면 열거 형 체크를 복제 할 필요가 없을 것입니다.

그러나 Graphql을 사용하지 않고 몽고가 액세스 할 수 있다면 (예 : 몽구스 기능에 액세스하는 미래의 모듈이나 서비스 등), 몽구스 수준에서 데이터 모델을 보호하고 싶을 것입니다 게다가.