Size: a a a

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

2020 September 21

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
У меня к примеру, в апи что я сейчас делаю - рест и gql, живут совместно, для различных клиентов. Так вот именно связь с бд и получение данных, я вообще вынес в отдельные сервисы, в случае рест контроллеры у меня являются валидаторами и не более, в случае gql также. Абстрагируйте по максимуму логику
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
Kirill Kaiumov
Сижу тут уже несколько месяцев и заметил, что у людей вопросы по graphql хоть на бэке, хоть на фронте, все касаются только JS/TS и всяких apollo.
На других языках graphql сервер тут никто не пишет? :) Или там всё понятно и нет вопросов? Тогда почему для фронта столько непонятного?
Пишу graphql–бэкэнды на Ruby, все хорошо 😺
источник

KK

Kirill Kaiumov in GraphQL — русскоговорящее сообщество
Dmitry Tsepelev
Пишу graphql–бэкэнды на Ruby, все хорошо 😺
я тоже на руби и тоже всё хорошо 🙂
источник

KK

Kirill Kaiumov in GraphQL — русскоговорящее сообщество
вопросы больше по дизайну схемы возникают
источник

b

bbclub in GraphQL — русскоговорящее сообщество
как на используемом apollo client добавить header в контексте ?
источник

А

Арсений in GraphQL — русскоговорящее сообщество
bbclub
как на используемом apollo client добавить header в контексте ?
источник

b

bbclub in GraphQL — русскоговорящее сообщество
да, у меня так сделано, но надо перезагружать страницу (создается new ApolloClient),
а в тот который создан уже как-нибудь можно уже добавить?
что-то не могу найти
источник

b

bbclub in GraphQL — русскоговорящее сообщество
типо client.header(....)
источник

K

Konstantin in GraphQL — русскоговорящее сообщество
bbclub
типо client.header(....)
источник

b

bbclub in GraphQL — русскоговорящее сообщество
спасибо
источник

AB

Aleksandr Bukhalo in GraphQL — русскоговорящее сообщество
@nodkz дай пожалуйста бест практиз из личного опыта, как лучше в схеме описать подобное:

Нужно забирать сущность по определённым полям, которые всегда уникальные. Пусть будет условный page и нам надо дать в схеме возможность забрать страницу по её id и пусть будет path, оба поля уникальные. Я вижу таие варианты:

1. Сделать отдельные ручки вроде page и pageByPath и соответственно дать сделать аргументы id и path обязательными для кажого Query. Не навится, потому что плодим Queries.

2. Сделать отдельную ручку вроде page и в ней два аргумента id и path. Плохо, потому что аргументы придётся делать необязательными и валидировать вне схемы.

Что-то ещё?
источник

A

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

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Aleksandr Bukhalo
@nodkz дай пожалуйста бест практиз из личного опыта, как лучше в схеме описать подобное:

Нужно забирать сущность по определённым полям, которые всегда уникальные. Пусть будет условный page и нам надо дать в схеме возможность забрать страницу по её id и пусть будет path, оба поля уникальные. Я вижу таие варианты:

1. Сделать отдельные ручки вроде page и pageByPath и соответственно дать сделать аргументы id и path обязательными для кажого Query. Не навится, потому что плодим Queries.

2. Сделать отдельную ручку вроде page и в ней два аргумента id и path. Плохо, потому что аргументы придётся делать необязательными и валидировать вне схемы.

Что-то ещё?
Что такое Дизайн. Это решение какой-либо задачи в удобной и простой форме.

Какой сделать дизайн графкуэль схемы?
Это зависит от твоих клиентов – как им будет удобнее всего потреблять твою схему. Надо дать так, чтоб удобно было взять.

Оба твоих варианта годны. Еще лучше если оба реализуешь 😅

type Query {
 pageById(id: Int!): Page
 pageByPath(path: String!): Page
 page(filter: PageFilter!): Page
}

type PageFilter {
 id: Int
 path: String
 pathRegexp: String
 pathStartsWith: String
 pathEndsWith: String
}

Пущай пользователь сам решает по какому из путей ему удобнее всего добраться до нужной страницы.
источник

b

bbclub in GraphQL — русскоговорящее сообщество
пользователю будет сложно выбрать когда много вариантов)
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Pavel @nodkz
Что такое Дизайн. Это решение какой-либо задачи в удобной и простой форме.

Какой сделать дизайн графкуэль схемы?
Это зависит от твоих клиентов – как им будет удобнее всего потреблять твою схему. Надо дать так, чтоб удобно было взять.

Оба твоих варианта годны. Еще лучше если оба реализуешь 😅

type Query {
 pageById(id: Int!): Page
 pageByPath(path: String!): Page
 page(filter: PageFilter!): Page
}

type PageFilter {
 id: Int
 path: String
 pathRegexp: String
 pathStartsWith: String
 pathEndsWith: String
}

Пущай пользователь сам решает по какому из путей ему удобнее всего добраться до нужной страницы.
Я бы оставил только page(filter: PageFilter!): Page как самый универсальный, filter переименовал бы в where.

И только не type PageFilter, а input PageFilter.

А когда завезут union input будет легко мигрировать.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
В Prisma как раз такой дизайн.
источник

AB

Aleksandr Bukhalo in GraphQL — русскоговорящее сообщество
Pavel @nodkz
Что такое Дизайн. Это решение какой-либо задачи в удобной и простой форме.

Какой сделать дизайн графкуэль схемы?
Это зависит от твоих клиентов – как им будет удобнее всего потреблять твою схему. Надо дать так, чтоб удобно было взять.

Оба твоих варианта годны. Еще лучше если оба реализуешь 😅

type Query {
 pageById(id: Int!): Page
 pageByPath(path: String!): Page
 page(filter: PageFilter!): Page
}

type PageFilter {
 id: Int
 path: String
 pathRegexp: String
 pathStartsWith: String
 pathEndsWith: String
}

Пущай пользователь сам решает по какому из путей ему удобнее всего добраться до нужной страницы.
Спасибо за развёрнутый ответ. А мы разве не попадаем с фильтром на такой проблеме, что если PageFilter обязательный, то вложенные поля должны быть необязательными, а значит можно отправить запрос с пустым PageFilter
источник

AB

Aleksandr Bukhalo in GraphQL — русскоговорящее сообщество
Да, конечно я могу НЕ на уровне схемы обработать ошибку, но это делает схему менее строгой
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Aleksandr Bukhalo
Спасибо за развёрнутый ответ. А мы разве не попадаем с фильтром на такой проблеме, что если PageFilter обязательный, то вложенные поля должны быть необязательными, а значит можно отправить запрос с пустым PageFilter
Если у тебя PageFilter обязательный, то тебе вроде придётся хоть одно из полей PageFilter обязательно передать.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
иначе PageFilter будет null
источник