Привет! Как поставщик API, я своими глазами видел, как GraphQL изменил правила игры в мире API. В этом блоге я расскажу вам, как создать API GraphQL.
Понимание основ GraphQL
Прежде всего, давайте разберемся, что такое GraphQL. В отличие от REST, который имеет фиксированный набор конечных точек, возвращающих предопределенные структуры данных, GraphQL позволяет клиентам точно указывать, какие данные им нужны. Это означает меньшее количество избыточной или недостаточной выборки данных, что является огромным плюсом.
Представьте, что вы создаете приложение, которому нужна информация о пользователе. С помощью REST API у вас может быть конечная точка, например/пользователи/:идентификаторкоторый возвращает целый набор пользовательских данных, некоторые из которых ваше приложение может даже не использовать. Но с помощью GraphQL клиент может отправить такой запрос:
запрос {пользователь(id: "123") {имя адрес электронной почты} }
И он получит толькоимяиэлектронная почтаполя пользователя с идентификатором123.
Настройка среды
Чтобы создать API GraphQL, вам понадобится несколько инструментов. Самым популярным для создания серверов GraphQL является Apollo Server, который отлично работает с Node.js. Итак, если вы еще этого не сделали, установите Node.js на свой компьютер.
После запуска Node.js создайте новый каталог для своего проекта и перейдите к нему в своем терминале. Затем инициализируйте новый проект Node.js, выполнив:
НПМ инициализация -y
Это создастпакет.jsonфайл в каталоге вашего проекта.
Затем установите Apollo Server и GraphQL:
npm установить графический сервер Apollo
Определение схемы
Схема — это сердце API GraphQL. Он определяет типы данных, которые могут запрашивать клиенты, и отношения между ними.
Допустим, мы создаем API для простой библиотеки. У нас могут быть типы дляКнига,Автор, иЖанр. Вот как вы можете определить базовую схему в JavaScript:
const {gql} = require('аполлон-сервер'); const typeDefs = gql` type Book {id: ID! Название: Строка! автор: Автор! жанр: Жанр! } введите Автор {id: ID! имя: Строка! книги: [Книга!]! } Введите Жанр {id: ID! имя: Строка! книги: [Книга!]! } введите запрос {books: [Книга!]! book(id: ID!): Авторы книг: [Автор!]! автор(id:ID!): Жанры автора: [Жанр!]! жанр(id: ID!): Жанр } `; модуль.экспорт = typeDefs;
В этой схеме мы определили три типа (Книга,Автор, иЖанр) иЗапростип, который позволяет клиентам получать данные.!Символ означает, что поле является обязательным.
Резольверы
Резолверы — это функции, которые сообщают GraphQL, как получить данные для каждого поля в схеме. Например, резольвер длякнигиполе вЗапросtype может получить список книг из базы данных.
Вот простой набор преобразователей для API нашей библиотеки:
const {книги, авторы, жанры } = require('./data'); constsolvers = { Запрос: {books: () => book: (parent, { id }) => book.find(book => book.id === id),authors: () =>authors,author:(parent, {id }) =>authors.find(author=>author.id=== id),жанры: () =>жанры,жанр:(parent,{id }) => жанры.найти(жанр => жанр.ид === id) }, Книга: { автор: (книга) => авторы.найти(автор => автор.ид === книга.авторИд), жанр: (книга) => жанры.найти(жанр => жанр.ид === книга.жанрИд) }, Автор: { книги: (автор) => книги.фильтр(книга => книга.авторИд === автор.ид) }, Жанр: {books: (genre) => book.filter(book => book.genreId === жанр.id) } }; модуль.экспорт = преобразователи;
В этом коде мы предполагаем, что у нас есть образцы данных вданные.jsфайл. Резолверы дляЗапросtype возвращает соответствующие данные, а преобразователи для других типов обрабатывают отношения между типами.
Создание сервера
Теперь, когда у нас есть схема и преобразователи, пришло время создать сервер Apollo.
const { ApolloServer } = require('аполлон-сервер'); const typeDefs = require('./schema'); константные преобразователи = require('./резольверы'); const server = new ApolloServer({typeDefs,solvers}); server.listen().then(({ url }) => { console.log(`Сервер готов в ${url}`); });
Когда вы запускаете этот код с помощьюузел index.js(при условии, что ваш файл называетсяindex.js), сервер начнет работать на локальном порту, и вы сможете получить доступ к игровой площадке GraphQL по URL-адресу, указанному в консоли.
Тестирование API
После запуска сервера вы можете протестировать свой API с помощью игровой площадки GraphQL. Откройте URL-адрес в браузере, и вы увидите интерфейс, в котором можно писать запросы и мутации.
Например, вы можете написать запрос, чтобы получить все книги:
запрос { книги { название автора { имя } } }
Этот запрос вернет список книг с их названиями и именами авторов.
Безопасность и производительность
При создании API GraphQL решающее значение имеют безопасность и производительность. Вам необходимо убедиться, что клиенты могут получить доступ только к тем данным, которые им разрешено видеть. Один из способов сделать это — реализовать механизмы аутентификации и авторизации.
Для повышения производительности вы можете использовать такие методы, как кэширование и пакетная обработка. Apollo Server имеет встроенную поддержку кэширования, и вы можете использовать такие библиотеки, какзагрузчик данныхдля пакетной обработки запросов к базе данных.


Интеграция с существующими системами
Как поставщику API вам может потребоваться интегрировать API GraphQL с существующими системами, такими как базы данных или другие API. Для взаимодействия с этими системами можно использовать разъемы или адаптеры. Например, если вы используете базу данных PostgreSQL, вы можете использоватьстр.библиотеку для подключения к ней и получения данных.
Заключение
Создание GraphQL API — отличный способ обеспечить гибкий и эффективный доступ к данным вашим клиентам. Следуя шагам, описанным в этом блоге, вы сможете создать надежный API GraphQL, отвечающий потребностям ваших пользователей.
Если вы заинтересованы в использовании наших сервисов API или у вас есть какие-либо вопросы о разработке API GraphQL, свяжитесь с нами для обсуждения закупок. Мы всегда рады общению и помощи в поиске лучших решений для вашего бизнеса.
Мы также предлагаем API, относящиеся к различным отраслям. Например, если вы работаете в фармацевтической отрасли, вас могут заинтересовать API, связанные с такими продуктами, какАнастрозолиГвайфенезин. Вы также можете узнать больше оАнастрозолна нашем сайте.
Ссылки
- Документация сервера Apollo
- Спецификация GraphQL
- Документация Node.js
