GraphQL и Prisma: зачем переопределять типы в схеме приложения, если они уже являются частью схемы базы данных Prisma?

Привет, я слежу за учебником GraphQL / Prisma (https://www.howtographql.com/graphql-js/6-authentication/), и мне интересно, зачем переопределять типы в схеме приложения, если они уже являются частью схемы базы данных Prisma и могут быть импортированы оттуда.

Ответ, который дает руководство, - «Чтобы скрыть потенциально конфиденциальную информацию от клиентских приложений». Что именно это означает? Почему мы дублируем определения в schema.graphql и datamodel.prisma? Потому что определения немного отличаются (т.е. модель данных содержит теги типа @unique)? А как мы что-то скрываем от клиентских приложений? Я по-прежнему в недоумении ....

В частности, в schema.graphql у меня есть

type User {
    id: ID!
    name: String!
    email: String!
    links: [Link!]!
}

и в datamodel.prisma у меня есть

type User {
    id: ID! @unique
    name: String!
    email: String! @unique
    password: String!
    links: [ Link!] !
}

person Cerulean    schedule 07.03.2019    source источник
comment
В схеме нет пароля, что, вероятно, подразумевается под скрытием потенциально конфиденциальной информации. Это обычная практика в любом API - не возвращать все данные из постоянного хранилища.   -  person DavidG    schedule 07.03.2019
comment
Ах, конечно! Мне все еще кажется странным иметь почти одинаковое определение в двух разных местах, но я понимаю, что вы имеете в виду.   -  person Cerulean    schedule 07.03.2019


Ответы (1)


В схеме нет поля password, что, вероятно, означает «скрыть потенциально конфиденциальную информацию».

Это обычная практика в любом API - не возвращать все данные из постоянного хранилища.

person DavidG    schedule 07.03.2019
comment
Итак, в основном модели, определенные в schema.graphql, содержат только те вещи, о которых вам нужно знать, тогда как модели в datamodel.prisma содержат все, что должно быть сохранено? - person Cerulean; 07.03.2019
comment
В основном да. В этом случае вы никогда не покажете поле пароля. Я надеюсь, что он все равно хеширован, поэтому единственное, что вам нужно сделать, это передать другой хешированный пароль вместе с именем пользователя или адресом электронной почты и подтвердить совпадение. - person DavidG; 07.03.2019