Size: a a a

GraphQL — русскоговорящее сообщество

2020 September 21

ПЧ

Павел Червов... in GraphQL — русскоговорящее сообщество
Павел Червов
Шикарно то шикарно, но для запроса одной сущности по id, а когда нужно вернуть список, то как быть? Возвращать целые объекты с ненужными полями?
Вроде вот есть решение.

Но таки интересно узнать @FluorescentHallucinogen @nodkz @DmitryBalitsky @eallenov в таком случае поступают?
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Павел Червов
Шикарно то шикарно, но для запроса одной сущности по id, а когда нужно вернуть список, то как быть? Возвращать целые объекты с ненужными полями?
Список чего необходимо вернуть?
источник

ПЧ

Павел Червов... in GraphQL — русскоговорящее сообщество
Dmitry Balitsky
Список чего необходимо вернуть?
Объектов, например пользователей.
Но хотелось бы чтобы в этих объектах были только запрошенные поля.
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Вы не понимаете как работает это, но давайте я попробую объяснить
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
У вас в сервере есть такое
const typeDefs = require('./graphql/typeDefs')
const resolvers = require('./graphql/resolvers')
источник

ПЧ

Павел Червов... in GraphQL — русскоговорящее сообщество
Dmitry Balitsky
У вас в сервере есть такое
const typeDefs = require('./graphql/typeDefs')
const resolvers = require('./graphql/resolvers')
это понимаю )
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
В типе вы пишете например

type User {
 _id: ID!
 name: String!
 age: Int
}
источник

ПЧ

Павел Червов... in GraphQL — русскоговорящее сообщество
Dmitry Balitsky
Вы не понимаете как работает это, но давайте я попробую объяснить
Возможно я не очень объяснил, я понимаю что вернуться только запрошенные поля, НО, из базы то я должен буду выбрать все поля, в этом и оверхед
источник

A

Alec in GraphQL — русскоговорящее сообщество
Alec
Коллеги, подскажите, пожалуйста, как лучше писать интеграционные тесты? BFF дело ответственное. Или лучше e2e интерфейсы тестить?
Up
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Для более интересного объяснения усложним

type User {
 _id: ID!
 name: String!
 age: Int
 profile: Profile
}
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Далее есть обработчик, вам интересно было получить данные, поэтому

type Query {
 getUsers: [User!]
}
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
После пишете обработчик

getUsers: async(parent, args, context, info) => {
  // args аргументов функция наша не получает
 // parent из других функций, наша функция тоже ничего не получает
 // info это для спец. задач
 // в  context обычно находится всё что необходимо для работы общего, например user и конект с базой
 
  // это описание для объяснения
}
источник

ПЧ

Павел Червов... in GraphQL — русскоговорящее сообщество
Dmitry Balitsky
После пишете обработчик

getUsers: async(parent, args, context, info) => {
  // args аргументов функция наша не получает
 // parent из других функций, наша функция тоже ничего не получает
 // info это для спец. задач
 // в  context обычно находится всё что необходимо для работы общего, например user и конект с базой
 
  // это описание для объяснения
}
Дмитрий, спасибо, дальше самое интересное, как мне в теле getUsers() получить пользователей из базы но чтобы они были только с теми полями, которые я запросили?
Не select * from users, a select id, name, age from users ? Понимаете?
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
getUsers: async(parent, args, { mongo: { ObjectId, Users }, user }) => {
  const resp = await Users.find({}).toArray()
 
  // В респонсе необязательно находится всё так как в апишке! например может быть объекты типа { _id: 1, name: "Jim", age: 36, password: "dfkajkdfjakj", created: 12454545454 }

 // но при отправке на фронт прилетит только то что определили в типах ранее
  return resp
}
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
type User {
 _id: ID!
 name: String!
 age: Int
 profile: Profile
}
источник

ПЧ

Павел Червов... in GraphQL — русскоговорящее сообщество
Dmitry Balitsky
type User {
 _id: ID!
 name: String!
 age: Int
 profile: Profile
}
Это - гарантия, что на фронт будут отданы только те данные которые запросили, но из базы мне придется тащить все, так?
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Из базы достаёте документ полностью, функция вернёт только то что запросит фронт
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
В этом и есть универсальность, что мол в одном случае, клиенты запросят что-то, в другом нет
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
Это джава скрипт, максимально гибко, нет жёстких запросов
источник

DB

Dmitry Balitsky in GraphQL — русскоговорящее сообщество
их можно сделать, но обычно всё гибко, в этом и смысл
источник