ДР
В чем же заключается сложность построения серверов GraphQL?
Что ж, в реальных приложениях вы, вероятно, столкнетесь со многими сценариями, где реализация преобразователей может стать чрезвычайно сложной. Тем более, что запросы GraphQL могут быть сложены в несколько уровней, реализация часто становится сложной и может легко привести к проблемам с производительностью.
В большинстве случаев вам также необходимо позаботиться о многих дополнительных рабочих процессах, таких как аутентификация, авторизация (разрешения), разбиение на страницы, фильтрация, в реальном времени, интеграция с сторонними службами или устаревшими системами ...
Как правило, при реализации преобразователей и подключении к базе данных у вас есть два варианта - оба из которых не очень убедительны:
1. Доступ к базе данных напрямую (путем написания SQL или с использованием другого API баз данных NoSQL);
2. Использовать ORM, который обеспечивает абстракцию для вашей базы данных и позволяет получить доступ к ней непосредственно с вашего языка программирования.
Первый вариант проблематичен, поскольку работа с SQL в resolvers сложна и быстро выходит из-под контроля. Другая проблема заключается в том, что SQL-запросы обычно передаются в базу данных как простые строки. Строки не придерживаются какой-либо структуры, это просто сырые последовательности символов. Поэтому ваш инструмент не сможет помочь вам найти какие-либо проблемы с ними или предоставить дополнительные преимущества, такие как автозаполнение в редакторах. Написание SQL-запросов, таким образом, утомительно и подвержено ошибкам.
Второй вариант - использовать ORM, который может показаться хорошим решением вначале. Однако этот подход обычно также не подходит. У ORM обычно возникает проблема, заключающаяся в том, что они реализуют довольно простые решения для доступа к базе данных, которые при использовании GraphQL не будут работать из-за сложности запросов и различных краевых случаев, которые могут возникнуть.
Prisma решает эту проблему, предоставляя вам механизм запросов GraphQL, который заботится о разрешении запросов для вас. При использовании Prisma вы внедряете свои решения таким образом, чтобы они просто делегировали входящие запросы базовому движку Prisma. Благодаря привязкам Prisma делегирование запросов - это простой процесс, в котором большинство резольверов могут быть реализованы как простые однострочные.
Примечание. Связывание Prisma основано на идее сшивания схем и делегирования схемы. Мы не собираемся подробно описывать эти методы в этом уроке. Если вы хотите узнать больше о них, вы можете проверить следующие две статьи:
- Схема схемы GraphQL объясняется: Делегирование схемы https://blog.graph.cool/graphql-schema-stitching-explained-schema-delegation-4c6caf468405
- Повторное использование и компоновка API-интерфейсов GraphQL с привязками GraphQL https://blog.graph.cool/reusing-composing-graphql-apis-with-graphql-bindings-80a4aa37cff5
Что важно для понимания этой архитектуры, что вы имеете дело с двумя (!) Уровнями API GraphQL. Уровень приложения и уровень базы данных.
Уровень приложения (The application layer)
Первый API GraphQL - это тот, который вы уже начали создавать в предыдущих разделах этого руководства. Это API-интерфейс GraphQL для прикладного уровня. Он определяет API, с которым будут разговаривать ваши клиентские приложения. Здесь вы реализуете бизнес-логику, обычные рабочие процессы, такие как аутентификация и авторизация, или интегрируетесь со сторонними службами (такими как Stripe, если вы хотите реализовать процесс оплаты). API прикладного уровня определяется схемой GraphQL в src / schema.graphql - поэтому мы теперь будем ссылаться на эту схему как схему приложения.
Уровень базы данных (The database layer)
Второй API GraphQL - это тот, который предоставляется Prisma и обеспечивает уровень базы данных. В основном это интерфейс на основе GraphQL для вашей базы данных, который избавляет вас от тонкостей написания SQL. Итак, как выглядит этот API-интерфейс GraphQL?