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

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

352 members

Архив канала @graphql_ru 25 июня 2018 г.

06:32:07 ДП
User 418917005
Крч вот такой клиентик накидал что б аполло ебучий не использовать (нужна была возможность полностью дисконнектиться и абсолютно не нужен дублирующий стейт менеджмент и кеширование)
06:32:11 ДП
User 418917005
import { onError } from 'apollo-link-error'
import { ApolloLink, split, execute } from 'apollo-link'
import { setContext } from 'apollo-link-context'
import { HttpLink } from 'apollo-link-http'
import { WebSocketLink } from 'apollo-link-ws'
import { getMainDefinition } from 'apollo-utilities'
import noop from 'lodash/noop'

window.useHttp = (bool=true) => {
    if (bool)
        localStorage.setItem('useHttp', '1')
    else
        localStorage.removeItem('useHttp')
    location.reload()
}

export default class Client {
    ws = null
    link = null

    constructor(uri, Authorization, onFirstConnect=noop, onDisconnect=noop, onReconnect=noop) {
        const http = localStorage.getItem('useHttp')
        this.ws = new WebSocketLink({
            uri: uri.replace('http', 'ws'),
            options: {
                reconnect: true,
                connectionParams: {
                    Authorization,
                },
            },
        })
        this.ws.subscriptionClient.onConnected(onFirstConnect)
        this.ws.subscriptionClient.onDisconnected(onDisconnect)
        this.ws.subscriptionClient.onReconnected(onReconnect)

        let link = this.ws
        if (http) {
            const httpLink = new HttpLink({uri})

            const authLink = setContext((_, {headers}) => {
                return {
                    headers: {
                        ...headers,
                        Authorization,
                    },
                }
            }).concat(httpLink)

            link = split(
                ({query}) => {
                    const {kind, operation} = getMainDefinition(query)
                    return kind === 'OperationDefinition' && operation === 'subscription'
                },
                this.ws,
                authLink,
            )
        }

        this.link = ApolloLink.from([
            onError(({graphQLErrors, networkError}) => {
                graphQLErrors && graphQLErrors.map(({message, locations, path}) =>
                    // eslint-disable-next-line no-console
                    console.error(
                        `[GraphQL error]: Message: ${message},\n` +
                        `Path: ${path} ${JSON.stringify(locations)}`
                    )
                )
                // eslint-disable-next-line no-console
                networkError && console.log(`[Network error]: ${networkError}`)
            }),
            link,
        ])
    }

    execute(query, variables) {
        return new Promise((resolve, reject) =>
            execute(this.link, {query, variables}).subscribe({next: resolve, error: reject})
        )
    }

    subscribe(query, variables, cb) {
        execute(this.link, {query, variables}).subscribe({next: cb})
    }

    close() {
        this.ws.subscriptionClient.unsubscribeAll()
        this.ws.subscriptionClient.close()
    }
}
06:33:02 ДП
User 418917005
По умолчанию используем только вебсокеты, но для отладки сделал возможность на хттп переключаться
06:33:59 ДП
User 418917005
Думаю теперь, есть ли смысл выкладывать в отдельный пакет
06:34:11 ДП
User 418917005
Какой-нибудь another-gql-client
09:12:10 ДП
User 119990994
может кто поделиться ссылками на проекты, где использется GraphQL? Хотелось бы посмотреть на код
09:12:40 ДП
User 119990994
в идеале бы проекты, где используется react, react-apollo, но другие тоже подойдут
09:22:14 ДП
User 478207156
User 119990994
может кто поделиться ссылками на проекты, где использется GraphQL? Хотелось бы посмотреть на код
Spectrum
09:27:13 ДП
User 43503298
User 418917005
Какой-нибудь another-gql-client
Конечно!
10:28:54 ДП
User 418917005
Мб заделаю на днях
10:37:24 ДП
User 360001442
User 478207156
Spectrum
Можно линк?
10:37:40 ДП
User 478207156
User 360001442
Можно линк?
В гугле первая ссылка
10:56:21 ДП
User 99248986
User 418917005
Крч вот такой клиентик накидал что б аполло ебучий не использовать (нужна была возможность полностью дисконнектиться и абсолютно не нужен дублирующий стейт менеджмент и кеширование)
так юзать гкуль+кеш вместо локал стореджа это же самая мякотка
10:59:18 ДП
User 360001442
@abu https://www.spectrum.com/ ?
10:59:49 ДП
User 478207156
User 360001442
@abu https://www.spectrum.com/ ?
https://github.com/withspectrum/spectrum
github.com/withspectrum/spectrum
Simple, powerful online communities. Contribute to withspectrum/spectrum development by creating an account on GitHub.
11:00:09 ДП
11:03:55 ДП
User 418917005
User 99248986
так юзать гкуль+кеш вместо локал стореджа это же самая мякотка
Ну у нас редакс во все поля
03:27:33 ПП
User 370449679
Всем привет
03:36:44 ПП
User 370449679
разбираюсь с этой технологией
03:36:55 ПП
User 138018444
User 370449679
разбираюсь с этой технологией
Понимаем
03:36:57 ПП
User 119990994
та я тоже
03:37:02 ПП
User 370449679
сейчас смог создать пост с помощью мутаций
03:37:06 ПП
User 370449679
type Query {
  posts: [Post!]!
}
03:37:16 ПП
User 370449679
как мне теперь запросить результат
03:37:45 ПП
User 370449679
query {
  posts
}
03:37:51 ПП
User 370449679
возвращает ошибку 400
03:41:38 ПП
User 321317845
{
    posts {
        id
        # ...
    }
}


Же
03:42:04 ПП
User 370449679
я думал по дефолту возвращает все возможные поля
03:43:08 ПП
User 370449679
да, все работает. а есть возможность вернуть все возможные поля?
03:44:24 ПП
User 370449679
вроде нельзя
03:44:28 ПП
User 370449679
но в принцепе логично
03:45:24 ПП
User 147656592
Суть graphql как раз в том, что в запросе запрашиваешь только то, что нужно, чтоб лишнего не гонять
03:46:33 ПП
User 321317845
@interpri5e зависит от реализации сервера (не будем тыкать пальцем), но в стандарте этого нет
03:47:03 ПП
User 370449679
User 321317845
@interpri5e зависит от реализации сервера (не будем тыкать пальцем), но в стандарте этого нет
понятно, что реализовать ты можешь как угодно, но нету смысла юзать и сразу слать стандарт
03:47:27 ПП
User 321317845
Почему?)
03:48:17 ПП
User 321317845
Если есть полная обратная совместимость, то почему нет?
03:52:08 ПП
User 370449679
вообще этот вопрос интересный, странно что нельзя запросить все поля. просто для легаси кода
03:55:50 ПП
User 206966715
Так расписать все поля ничего не стоит. Всегда можно подсмотреть, какие поля доступны и, например, в графикле автоподстановкой все нужное выделить, а потом запрос на клиенте вбить