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

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

352 members

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

10:33:52 ДП
User 326123753
Всем привет!
Подскажите, как загрузить картинку на сервер через graphQL?
10:39:01 ДП
User 68794663
User 326123753
Всем привет!
Подскажите, как загрузить картинку на сервер через graphQL?
https://blog.apollographql.com/file-uploads-with-apollo-server-2-0-5db2f3f60675
blog.apollographql.com/file-uploads-with-apollo-server-2-0-5db2f3f60675
Learn how to upload files with Apollo Server and set it up on the client.
10:40:13 ДП
User 99248986
User 326123753
Всем привет!
Подскажите, как загрузить картинку на сервер через graphQL?
я бы советовал юзать http upload и дальше юзать только путь к картинке
10:40:27 ДП
User 99248986
загрузка это по сути не часть апи
10:40:42 ДП
User 68794663
User 99248986
загрузка это по сути не часть апи
Почему?
10:41:26 ДП
User 68794663
У приложения единый endpoint, который принимает и данные и файлы. По-моему, очень классно.
10:41:46 ДП
User 326123753
А как отправить картинку по  url с клиента?
10:41:53 ДП
User 326123753
Не совсем понятно
10:42:05 ДП
User 68794663
User 326123753
А как отправить картинку по  url с клиента?
Отправить мутацию с этим url
10:42:24 ДП
User 99248986
User 68794663
Почему?
у S3 это очень хорошо сделано, есть просто signed url, пот которому картинка загружается в s3, дальше апи принимает путь к картинке уже просто как данные
10:42:54 ДП
User 114640100
User 326123753
Всем привет!
Подскажите, как загрузить картинку на сервер через graphQL?
думаю никак, upload, а через graphql — url
10:43:36 ДП
User 99248986
User 68794663
Почему?
еще и потому что это transport-specific задача, а graphql (как и любой апи фреймворк по хорошему) должен быть transport-agnostic
10:44:28 ДП
User 99248986
поэтому мне не очень нравятся вот эти костыли через мутации
10:44:53 ДП
User 326123753
User 114640100
думаю никак, upload, а через graphql — url
А если путь к картинке - это локальное хранилище девайса React Native?
Как тогда отправлять?
10:45:11 ДП
User 68794663
User 99248986
поэтому мне не очень нравятся вот эти костыли через мутации
Хз, дело вкуса. Как по мне, так очень элегантно.
10:45:34 ДП
User 114640100
User 326123753
А если путь к картинке - это локальное хранилище девайса React Native?
Как тогда отправлять?
ну так оно ж с чем-то синхронится?
10:45:46 ДП
User 68794663
User 326123753
А если путь к картинке - это локальное хранилище девайса React Native?
Как тогда отправлять?
Use FileList, File, Blob or ReactNativeFile instances anywhere within query or mutation input variables to send a GraphQL multipart request.

Это в статье, что я скинул.
10:46:44 ДП
User 68794663
Единственное что меня смущает, так это канал.

Если грузить файлы мутацией, то нужен широкий канал на своём сервере. Так?
10:47:09 ДП
User 99248986
User 68794663
Единственное что меня смущает, так это канал.

Если грузить файлы мутацией, то нужен широкий канал на своём сервере. Так?
я про это и говорю
10:47:16 ДП
User 99248986
а если там картинка пара гигов
10:47:30 ДП
User 99248986
нужен какой-то мультипарт или стрим или еще что-то хитрое
10:47:35 ДП
User 99248986
тут уже не пахнет апи
10:47:43 ДП
User 68794663
User 99248986
а если там картинка пара гигов
Ага, или рип блюрейчика. 😜
10:48:00 ДП
User 68794663
Лимит на размер файла никто не отменял.
10:49:17 ДП
User 114640100
User 99248986
а если там картинка пара гигов
тут апи уже не удобная архитектура
10:49:45 ДП
User 68794663
А насчёт транспорта. Что есть варианты помимо HTTP/WebSockets?
10:50:21 ДП
User 99248986
да при желании можно напрямую по tcp
10:50:27 ДП
User 99248986
открывать сокет и слать байты
10:50:56 ДП
User 99248986
просто http и websocket дают протокол удобный поверх
10:51:03 ДП
User 114640100
User 68794663
А насчёт транспорта. Что есть варианты помимо HTTP/WebSockets?
Я думаю какие-то Либы есть для этого, изобретать чайник верхом на велосипеде это знаете ли от лукавого
10:52:06 ДП
User 99248986
FTP же забыли!
10:52:35 ДП
User 99248986
и можно даже еще ниже tcp, по udp слать
10:53:25 ДП
User 68794663
Тогда юзать на клиенте JS SDK S3/Cloudinary/(что больше нравится), грузить файлы напрямую в эти хранилища, получать ссылку, а ссылку уже слать в свою базу данных мутацией по GraphQL API.
10:54:20 ДП
User 68794663
User 99248986
и можно даже еще ниже tcp, по udp слать
Ага, https://webtorrent.io (https://github.com/webtorrent/webtorrent) прикрутить. :)
10:54:38 ДП
User 99248986
User 68794663
Тогда юзать на клиенте JS SDK S3/Cloudinary/(что больше нравится), грузить файлы напрямую в эти хранилища, получать ссылку, а ссылку уже слать в свою базу данных мутацией по GraphQL API.
👍
10:54:48 ДП
User 68794663
Слать magnet-ссылку, а сервер пусть сам выкачивает торрент. )))
10:55:31 ДП
User 99248986
у амазона поддежрка всего на свете вплоть до трейлера с серверами, который к тебе приедет и заберет твою картинку в s3
11:10:45 ДП
User 206966715
https://medium.com/@andrewingram/how-to-upload-files-with-graphql-1e6b8dfda71
medium.com/@andrewingram/how-to-upload-files-with-graphql-1e6b8dfda71
Don’t
11:11:57 ДП
User 206966715
А вообще есть
https://github.com/graphql-compose/graphql-compose-boilerplate-upload
github.com/graphql-compose/graphql-compose-boilerplate-upload
Contribute to graphql-compose-boilerplate-upload development by creating an account on GitHub.
11:18:33 ДП
User 68794663
User 206966715
https://medium.com/@andrewingram/how-to-upload-files-with-graphql-1e6b8dfda71
medium.com/@andrewingram/how-to-upload-files-with-graphql-1e6b8dfda71
Don’t
Очень содержательная статья, всё чётко и по делу. 😁
11:21:33 ДП
User 68794663
Если всё-таки я избрал путь грузить файлы через GraphQL, может ли в этом случае API ограничить размер файла до момента его полной загрузки?

Понятно, что на клиенте есть некая формочка и я там могу порезать размер. Но если планируется ещё дополнительно и работать с API напрямую.
11:22:37 ДП
User 326123753
User 68794663
Use FileList, File, Blob or ReactNativeFile instances anywhere within query or mutation input variables to send a GraphQL multipart request.

Это в статье, что я скинул.
Да, только не могу понять как это сделать имея ссылку на картинку
11:23:16 ДП
User 68794663
User 326123753
Да, только не могу понять как это сделать имея ссылку на картинку
У тебя самого файла что ли нет, только URL этого файла?
11:23:40 ДП
User 326123753
User 68794663
У тебя самого файла что ли нет, только URL этого файла?
Да, только url
11:23:48 ДП
User 326123753
на локальное хранилище
11:23:59 ДП
User 326123753
в девайсе
11:26:21 ДП
User 68794663
import { ReactNativeFile } from 'apollo-upload-client' const file = new ReactNativeFile({ uri: '…', type: 'image/jpeg', name: 'photo.jpg' }) const files = ReactNativeFile.list([ { uri: '…', type: 'image/jpeg', name: 'photo-1.jpg' }, { uri: '…', type: 'image/jpeg', name: 'photo-2.jpg' } ])
11:27:02 ДП
User 68794663
uri – ссылка на файл в твоём локальном хранилище
11:27:51 ДП
User 326123753
User 68794663
import { ReactNativeFile } from 'apollo-upload-client' const file = new ReactNativeFile({ uri: '…', type: 'image/jpeg', name: 'photo.jpg' }) const files = ReactNativeFile.list([ { uri: '…', type: 'image/jpeg', name: 'photo-1.jpg' }, { uri: '…', type: 'image/jpeg', name: 'photo-2.jpg' } ])
Спасибо большое, сейчас попробую
11:55:50 ДП
User 144022504
User 326123753
Всем привет!
Подскажите, как загрузить картинку на сервер через graphQL?
проблем с загрузкой картинок нет!  кто-то до сих пор живет в прошлом) 
юзаю эту либу и не знаю проблем
https://github.com/jaydenseric/apollo-upload-server
github.com/jaydenseric/apollo-upload-server
apollo-upload-server - Enhances Node.js GraphQL servers for intuitive file uploads via GraphQL mutations.
12:07:08 ПП
User 268281056
Привет.

Возникла проблема при написании Query. Не могу сделать без пробрасывания аргумента, иначе - ругается.

Могу ли я сделать query без аргументов? С аргументами все ок (пробрасываю пустую строку)
12:08:33 ПП
User 124962553
User 268281056
Привет.

Возникла проблема при написании Query. Не могу сделать без пробрасывания аргумента, иначе - ругается.

Могу ли я сделать query без аргументов? С аргументами все ок (пробрасываю пустую строку)
в query уже не надо писать возвращаемые типы
12:08:50 ПП
User 124962553
только поля которые нужны
12:09:51 ПП
User 124962553
allApprarel {
  ... тут поля
}
12:09:57 ПП
User 124962553
или я не понял вопроса)
12:10:10 ПП
User 268281056
Как раз только что разобрался (хотя проблема была актуальна на протяжении 3 дней, все откладывал)
12:10:16 ПП
User 268281056
решение было в том, что при определении Query
12:10:25 ПП
User 268281056
если не ожидается аргументов, то не нужно писать ()
12:10:40 ПП
User 268281056
не знал, не дочитал

в общем спасибо за внимание
12:48:56 ПП
User 144022504
тип ID, делаю query но скобками и без скобок ошибка? где ошибаюсь?
12:49:01 ПП
01:08:05 ПП
User 206966715
User 144022504
Разве facebookUserId вообще должен какие-либо аргументы принимать?
01:08:57 ПП
User 206966715
Просто scalar field же
01:10:50 ПП
User 144022504
User 206966715
Разве facebookUserId вообще должен какие-либо аргументы принимать?
получается по токену определяет?
01:16:54 ПП
User 144022504
User 206966715
Просто scalar field же
да, так и есть) спасибо!
05:59:23 ПП
User 68794663
User 144022504
проблем с загрузкой картинок нет!  кто-то до сих пор живет в прошлом) 
юзаю эту либу и не знаю проблем
https://github.com/jaydenseric/apollo-upload-server
github.com/jaydenseric/apollo-upload-server
apollo-upload-server - Enhances Node.js GraphQL servers for intuitive file uploads via GraphQL mutations.
Кто-то тоже до сих пор живёт в прошлом. 😜

apollo-upload-server не нужен, потому что upload файлов добавили во вторую версию apollo-server «из коробки».
06:00:43 ПП
User 68794663
User 326123753
Спасибо большое, сейчас попробую
Как успехи?
06:16:07 ПП
User 144022504
User 68794663
Кто-то тоже до сих пор живёт в прошлом. 😜

apollo-upload-server не нужен, потому что upload файлов добавили во вторую версию apollo-server «из коробки».
классно что есть из чего выбрать)
08:03:28 ПП
User 144022504
делаю мутацию:

updateTeacher(facebookUserId: ID!, gender: Boolean!, name: String!, text: String!): TeacherAuthPayload!
type TeacherAuthPayload {
  token: String!
  teacher: Teacher!
}

async updateTeacher(parent, { facebookUserId, gender, name, text }, ctx, info) {
    const teacher = await ctx.db.query.teacher({ where: { facebookUserId } })
    if (!teacher) {
      return {
        error: {
          field: 'facebookUserId',
          msg: 'No user found'
        }
      }
    }

    return ctx.db.mutation.updateTeacher(
      {
        where: { facebookUserId },
        data: {
          gender,
          name,
          text,
        }
      }
    )
  },

const TeacherAuthPayload = {
  teacher: async ({ teacher: { facebookUserId } }, args, ctx, info) => {
    return ctx.db.query.teacher({ where: { facebookUserId } }, info)
  },
}

в ответ Cannot destructure property facebookUserId of undefined or null.

Где ошибаюсь?