Size: a a a

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

2021 March 01

AY

Alexey Yurchenko in GraphQL — русскоговорящее сообщество
Maxim Antsiferov
Есть какая-то легковесная либа для graphql-tag чтобы делать запросы?
graphql-tag нужна для парсинга graphql на клиенте. Зачем оно вам?
Просто делать запросы с переменной можно с обычным fetch
источник

AY

Alexey Yurchenko in GraphQL — русскоговорящее сообщество
fetch('/graphql', { method: 'POST', body: JSON.stringify({ query, variables }) })
источник

QQ

Qaisar Qarashauly in GraphQL — русскоговорящее сообщество
Alexey Yurchenko
graphql-tag нужна для парсинга graphql на клиенте. Зачем оно вам?
Просто делать запросы с переменной можно с обычным fetch
а загрузка файлов через graphql все делают через fetch form-data или есть какой нибудь более элегантный способ?
источник

AY

Alexey Yurchenko in GraphQL — русскоговорящее сообщество
Qaisar Qarashauly
а загрузка файлов через graphql все делают через fetch form-data или есть какой нибудь более элегантный способ?
S3 presigned url
источник

AY

Alexey Yurchenko in GraphQL — русскоговорящее сообщество
Qaisar Qarashauly
а загрузка файлов через graphql все делают через fetch form-data или есть какой нибудь более элегантный способ?
Самый просто вариант s3 (в смысле любой s3 compatible storage, почти у всех есть и minio для тех, кто на железяках). Там есть presignedUrl, graphql просто отдает ссылку куда происходит загрузка файла + это не нагружает сам graphql сервер.

Вариант чуть сложнее, тоже самое, только отдельный upload сервис, который чекает права на загрузку и загружает файл как обычный сервис (так можно посчитать хеши файла, сделать пару версий картинок и тп).
источник

AY

Alexey Yurchenko in GraphQL — русскоговорящее сообщество
https://docs.min.io/docs/javascript-client-api-reference#presignedPutObject

// упрощенный код
uploadUrl: resolve(parent, args) {
 return minioClient.presignedPutObject('mybucket', parent.id + '.jpg', 24*60*60);
}

miniojs просто легкая библиотека для этого, в отличии от aws sdk

на клиенте будет запрос + fetch на загрузку файла по uploadUrl.
fetch(uploadUrl, { method: 'PUT', body: file })
источник

QQ

Qaisar Qarashauly in GraphQL — русскоговорящее сообщество
Alexey Yurchenko
https://docs.min.io/docs/javascript-client-api-reference#presignedPutObject

// упрощенный код
uploadUrl: resolve(parent, args) {
 return minioClient.presignedPutObject('mybucket', parent.id + '.jpg', 24*60*60);
}

miniojs просто легкая библиотека для этого, в отличии от aws sdk

на клиенте будет запрос + fetch на загрузку файла по uploadUrl.
fetch(uploadUrl, { method: 'PUT', body: file })
Понял, почитаю, спасибо :)
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Alexey Yurchenko
Самый просто вариант s3 (в смысле любой s3 compatible storage, почти у всех есть и minio для тех, кто на железяках). Там есть presignedUrl, graphql просто отдает ссылку куда происходит загрузка файла + это не нагружает сам graphql сервер.

Вариант чуть сложнее, тоже самое, только отдельный upload сервис, который чекает права на загрузку и загружает файл как обычный сервис (так можно посчитать хеши файла, сделать пару версий картинок и тп).
Более того, такой вариант удобнее масштабировать, легко мигрировать. Разве что нужно продумывать логику хранения URL.
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Alexey Yurchenko
https://docs.min.io/docs/javascript-client-api-reference#presignedPutObject

// упрощенный код
uploadUrl: resolve(parent, args) {
 return minioClient.presignedPutObject('mybucket', parent.id + '.jpg', 24*60*60);
}

miniojs просто легкая библиотека для этого, в отличии от aws sdk

на клиенте будет запрос + fetch на загрузку файла по uploadUrl.
fetch(uploadUrl, { method: 'PUT', body: file })
miniojs не является более легкой, но она более универсальная. Если у вас self-hosted минио, она незаменима, также их либа может с любым другим s3 провайдером общаться. А бибилиотека от aws только с теми, что полностью поддерживают стандарт s3. Тот же минио не полностью совместим
источник

AY

Alexey Yurchenko in GraphQL — русскоговорящее сообщество
aws sdk так же будет с self hosted minio работать (s3 часть)
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Alexey Yurchenko
aws sdk так же будет с self hosted minio работать (s3 часть)
Нет
источник

AY

Alexey Yurchenko in GraphQL — русскоговорящее сообщество
в смысле нет, если работает 😳
источник

AY

Alexey Yurchenko in GraphQL — русскоговорящее сообщество
оно все s3 compatible
апи там один
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Alexey Yurchenko
в смысле нет, если работает 😳
Не все методы поддерживаются
источник

AY

Alexey Yurchenko in GraphQL — русскоговорящее сообщество
* Если несчитать надстроки minio, вроде событий. Но это крайне редко используется
да
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Alexey Yurchenko
* Если несчитать надстроки minio, вроде событий. Но это крайне редко используется
да
уровни доступа устроены по другому, потоковая загрузка тоже, вроде как еще минио эмулирует работу с распределенными бакетами, но функциональности такой нет
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Ну если тупо загружать картиночки, то поидее должно все ок быть, да
источник

AY

Alexey Yurchenko in GraphQL — русскоговорящее сообщество
Тогда ок, возможно. Я не использую это в апи, тогда это чисто мой кейс (aws-sdk = minio). Самое простое get, put и тп
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Кстати вопрос на засыпку, кто в проде использует минио, как ведет себя multi tenant? У меня порой синхронизация просто стопается и помогает перезапуск процессов. Пришлось перекатываться на mail.ru cloud из за этого
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Гитхаб бродяги ничем не помогли
источник