Усовершенствуйте свой GraphQL API: Освоение загрузки файлов с помощью Yoga GraphQL
GraphQL Yoga - это надежный фреймворк, который позволяет легко интегрировать загрузку файлов в рабочий процесс GraphQL API благодаря поддержке спецификации GraphQL Multipart Request Specification. Используя эту возможность, вы можете эффективно работать с загрузкой файлов и обрабатывать бинарные данные в резолверах GraphQL через HTTP. В этом руководстве мы рассмотрим, как использовать возможности GraphQL Yoga для расширения функциональности API с помощью загрузки файлов.
Ключевые особенности
Бесшовное потребление загруженных файлов
С помощью GraphQL Yoga вы можете без труда использовать загруженные файлы или блобы как стандартные объекты WHATWG File или Blob, аналогичные тем, которые можно найти в API браузера. Такой стандартизированный подход упрощает работу с загруженными файлами, обеспечивая совместимость с различными клиентскими приложениями.
Быстрая интеграция с клиентскими решениями
GraphQL Yoga совместим с любым клиентом, поддерживающим спецификацию GraphQL Upload. Независимо от того, используете ли вы Apollo Client, Relay или другое клиентское решение GraphQL, вы можете легко интегрировать загрузку файлов в рабочий процесс вашего приложения.
Руководство по реализации
Начало работы
Чтобы начать обработку загрузки файлов в GraphQL Yoga, начните с добавления скаляра File в вашу схему. Этот простой шаг заложит основу для удобной обработки загрузки файлов в вашем GraphQL API.
Пример кода
Вот пример реализации, демонстрирующий, как обрабатывать загрузку файлов в GraphQL Yoga:
import { createYoga } from 'graphql-yoga'
import { createServer } from 'http'
// Provide your schema
const yoga = createYoga({
schema: createSchema({
typeDefs: /* GraphQL */ `
scalar File
type Query {
greetings: String!
}
type Mutation {
saveFile(file: File!): Boolean!
}
`,
resolvers: {
Query: {
greetings: () => 'Hello World!'
},
Mutation: {
saveFile: async (_, { file }: { file: File }) => {
try {
const fileArrayBuffer = await file.arrayBuffer()
await fs.promises.writeFile(
path.join(__dirname, file.name),
Buffer.from(fileArrayBuffer),
)
} catch (e) {
return false
}
return true
},
}
}
})
})
// Start the server and explore http://localhost:4000/graphql
const server = createServer(yoga)
server.listen(4000, () => {
console.info('Server is running on http://localhost:4000/graphql')
})
Тестирование с помощью Curl
После запуска сервера вы можете использовать Curl для тестирования конечной точки. Вот пример команды Curl для тестирования загрузки файлов:
curl --location 'http://127.0.0.1:4000/graphql' \
--form 'operations="{ \"query\": \"mutation ($file: File!) { saveFile(file: $file) }\", \"variables\": { \"file\": null } }"' \
--form 'map="{ \"0\": [\"variables.file\"] }"' \
--form '0=@"mytext.txt"'
Заключение
Следуя этому руководству, вы раскроете весь потенциал загрузки файлов в вашем GraphQL API с помощью Yoga GraphQL. Благодаря бесшовной интеграции и широким возможностям, GraphQL Yoga позволит вам усовершенствовать ваш API с помощью эффективной функциональности загрузки файлов, обеспечивая исключительный пользовательский опыт для вашего приложения.