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

Общаемся на темы, посвященные GraphQL и опыту его использования. Проблемы. Новости. Решения. Вам могут быть полезны: @apollo_ru, @react_js, @vuejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание в чате было полезным и комфортным.

352 members

Архив канала @graphql_ru 29 сентября 2018 г.

04:43:16 ДП
User 56456060
Попробуй все-таки apollo-server взять второй версии (это полная копия йоги). Так сказать все от одного производителя, чтоб было.
04:53:52 ДП
User 56456060
User 417692616
Всем привет. Делаю свой первый graphql server., идея нравится, да вот только не понимаю, как можно избежать лютого копипаста полей. Вот пример:
type Car {
  id: ID! @unique
  type: String!
  name: String
  translatedNames: [TranslatedName]
  image: Image
  birthplace: Birthplace
  productionText: String
  marketText: String
}

input CreateCarInput {
  id: ID! @unique
  type: String!
  name: String
  translatedNames: [TranslatedName]
  image: Image
  birthplace: Birthplace
  productionText: String
  marketText: String
}

input UpdateCarInput {
  id: ID! @unique
  type: String!
  name: String
  translatedNames: [TranslatedName]
  image: Image
  birthplace: Birthplace
  productionText: String
  marketText: String
}
Ну ведь одно и тоже три раза пишу. Можно ли как-то этого избежать?
Про инпут-тип, почему его завели https://github.com/nodkz/conf_talks/tree/master/particles/graphql/types#input-types

Ну и плюс (тоже надо добавить в доку) там по коду реализации есть важный ньанс:
- все аутпут типы для своих скалярных полей вызывают метод serialize
- а вот все инпут объекты - parseValue.

И тупа важна скорость при выполнении операции в рантайме. Даже ценой дубляжа типов.
github.com/nodkz/conf_talks/tree/master/particles/graphql/types
Contribute to nodkz/conf_talks development by creating an account on GitHub.
05:07:04 ДП
User 56456060
User 417692616
Искал что-то вроде fragments, но подходящего для данного случая, но ничего нет. И во всех примерах в доке, в статьях, все типы состоят из  двух-трех полей и проблема копипаста остро не стоит. А у меня в некоторых типах по 30 полей, и как-то не охота при изменениях потом в нескольких местах менять.
Тогда тебе надо схему генерировать, чтоб не мучиться с копипастой (смотри с 34 минуты) - https://youtu.be/F4vHSHzpO1g?t=34m13s

Ровно из-за твоей проблемы я два года назад начал писать graphql-compose. В нем есть вот такой метод https://graphql-compose.github.io/docs/en/api-misc.html#toinputobjecttype для генерации инпут типа из аутпут типа.

Ну а если типы сразу делаешь через композ, то такой метод
youtube.com/watch?v=F4vHSHzpO1g
GraphQL приходит на смену REST API. Что такое GraphQL и из каких основных частей он состоит. Как бэкендеры описывают возможности своего сервера, а фронтендер...
05:07:34 ДП
User 56456060
User 56456060
Тогда тебе надо схему генерировать, чтоб не мучиться с копипастой (смотри с 34 минуты) - https://youtu.be/F4vHSHzpO1g?t=34m13s

Ровно из-за твоей проблемы я два года назад начал писать graphql-compose. В нем есть вот такой метод https://graphql-compose.github.io/docs/en/api-misc.html#toinputobjecttype для генерации инпут типа из аутпут типа.

Ну а если типы сразу делаешь через композ, то такой метод
youtube.com/watch?v=F4vHSHzpO1g
GraphQL приходит на смену REST API. Что такое GraphQL и из каких основных частей он состоит. Как бэкендеры описывают возможности своего сервера, а фронтендер...
https://graphql-compose.github.io/docs/en/api-TypeComposer.html#getinputtype
graphql-compose.github.io/docs/en/api-TypeComposer.html
Main class that gets `GraphQLObjectType` and provide ability to change them.
06:31:33 ДП
User 417692616
User 56456060
https://graphql-compose.github.io/docs/en/api-TypeComposer.html#getinputtype
graphql-compose.github.io/docs/en/api-TypeComposer.html
Main class that gets `GraphQLObjectType` and provide ability to change them.
Посмотрю, спасибо
09:46:38 ДП
User 177959541
User 56456060
Попробуй все-таки apollo-server взять второй версии (это полная копия йоги). Так сказать все от одного производителя, чтоб было.
Спасибо, попробую
12:57:33 ПП
User 135278254
User 56456060
Про инпут-тип, почему его завели https://github.com/nodkz/conf_talks/tree/master/particles/graphql/types#input-types

Ну и плюс (тоже надо добавить в доку) там по коду реализации есть важный ньанс:
- все аутпут типы для своих скалярных полей вызывают метод serialize
- а вот все инпут объекты - parseValue.

И тупа важна скорость при выполнении операции в рантайме. Даже ценой дубляжа типов.
github.com/nodkz/conf_talks/tree/master/particles/graphql/types
Contribute to nodkz/conf_talks development by creating an account on GitHub.
👍
12:57:44 ПП
User 210944655
akaSybe (0) увеличил репутацию Pavel Nod (11)
12:58:57 ПП
User 135278254
User 417692616
Всем привет. Делаю свой первый graphql server., идея нравится, да вот только не понимаю, как можно избежать лютого копипаста полей. Вот пример:
type Car {
  id: ID! @unique
  type: String!
  name: String
  translatedNames: [TranslatedName]
  image: Image
  birthplace: Birthplace
  productionText: String
  marketText: String
}

input CreateCarInput {
  id: ID! @unique
  type: String!
  name: String
  translatedNames: [TranslatedName]
  image: Image
  birthplace: Birthplace
  productionText: String
  marketText: String
}

input UpdateCarInput {
  id: ID! @unique
  type: String!
  name: String
  translatedNames: [TranslatedName]
  image: Image
  birthplace: Birthplace
  productionText: String
  marketText: String
}
Ну ведь одно и тоже три раза пишу. Можно ли как-то этого избежать?
а разве при создании автомобиля у тебя ID приходит с клиента? или почему ID обязательное поле?
12:59:44 ПП
User 135278254
разделение инпут типов и просто типов я думаю сделано ещё и потому, что часто эти модели не совпадают по структуре
01:00:11 ПП
User 135278254
например какое-нибудь поле created/updated добавляется только на сервере после создания сущности
01:02:37 ПП
User 135278254
возвращаясь к разделению моделей для создания/обновления сущности: при обновлении сущности ID обычно не требуется с клиента, а при обновлении ID обязателен, и использование одной модели для двух операций приводит к нарушению SRP
01:08:31 ПП
User 135278254
а кто-то встречал какие-нибудь статьи или советы по организации графа доступных сущностей?
01:09:01 ПП
User 135278254
например, меня интересует вопрос: допустим есть сущность User, у которой есть массив Orders
01:09:23 ПП
User 135278254
user {
  orders {
    id,
    name
  }
}
01:10:11 ПП
User 135278254
если сделать такой квери то сначала будет вызван резолвер юзера, а потом уже резолвер заказов
01:10:55 ПП
User 135278254
стоит сделать что-то типа getUserOrders(userID: ID!) квери вместо nested-поля orders?
01:14:00 ПП
User 135278254
я к тому, что если допустим резолвер юзера обращается к базе, а резолвер заказов обращается к какому-то микросервису, то при запросе заказов происходит лишний запрос к базе
01:37:41 ПП
User 56456060
Твой вариант orders(filter: { userId: x}) { ... } организуй нормальную фильтрацию, вместо непонятных составных названий ;)
01:42:55 ПП
User 135278254
но если в приложении есть ограничения по доступу к информации о юзере, в частности к его заказам, то логику доступа придётся прописыывать и в резолвере юзера, и в резолвере orders(filter: ...), и во всех других резолверах, связанных сущностей, в подходе с nested-property это можно сделать в корневом резолвере и там кидать ошибку доступа
01:45:39 ПП
User 135278254
как вариант я вижу сделать так:

user {
  info { ... },
  orders: { ... }  
}

резолвер юзера фактически ничего не делает кроме проверки доступа, а информация о юзера будет доставаться в резолвере info
01:46:05 ПП
User 135278254
но в таком подходе появляются дополнительные уровни вложенности =\
05:58:49 ПП
User 28753518
Привет! подскажите, кто знает как сделать чтобы добавлялись даты создания, редактирования javascript
type Post {
  id: ID! @unique
  title: String!
  content: String!
  published: Boolean! @default(value: "false")
  author: User!
} база postgresql
06:00:37 ПП
User 28753518
нуда и prisma  используется