В мире разработки GraphQL мутации играют решающую роль в изменении данных на стороне сервера. Hot Chocolate, популярная серверная библиотека GraphQL для.NET, предоставляет мощный и гибкий способ обработки мутаций. В этой статье мы погрузимся в область мутаций «Горячего шоколада» и рассмотрим различные методы их реализации, дополненные примерами кода.
Содержание:
-
Что такое мутации?
-
Знакомство с горячим шоколадом
-
Создание проекта по производству горячего шоколада
-
Базовая настройка мутации
-
Типы входных данных и аргументы
-
Резолверы полей и манипулирование данными
-
Обработка и проверка ошибок
-
Авторизация и аутентификация
-
Расширенные шаблоны мутаций
-
Тестирование мутаций
-
Вывод
-
Что такое мутации?
Мутации в GraphQL — это операции, используемые для изменения данных на стороне сервера. Они аналогичны методам HTTP POST, PUT, PATCH и DELETE. Мутации позволяют клиентам отправлять данные на сервер и запрашивать изменения в базовом хранилище данных. -
Знакомство с горячим шоколадом.
Горячий шоколад — это серверная библиотека GraphQL для.NET, которая предоставляет простой и элегантный способ создания API-интерфейсов GraphQL. Он предлагает богатый набор функций и инструментов для реализации мутаций, включая типы ввода, проверку аргументов, обработку ошибок и многое другое. -
Настройка проекта «Горячий шоколад».
Чтобы начать работу с «Горячим шоколадом», вам необходимо настроить новый проект.NET. Вот пошаговое руководство, как это сделать:// Code example for setting up a Hot Chocolate project dotnet new web -n MyHotChocolateProject cd MyHotChocolateProject dotnet add package HotChocolate.AspNetCore -
Базовая настройка мутации:
Давайте начнем с создания базовой мутации в горячем шоколаде. Вот пример простой мутации «createUser», которая принимает имя и адрес электронной почты в качестве входных данных и возвращает созданного пользователя:// Code example for a basic createUser mutation public class Mutation { [GraphQLName("createUser")] public User CreateUser(string name, string email) { // Logic to create a new user and return it } } -
Типы входных данных и аргументы.
Горячий шоколад позволяет определять типы входных данных и аргументы для мутаций. Это помогает в организации и проверке входных данных. Вот пример мутации, использующей тип ввода:// Code example for a createUser mutation with an input type public class Mutation { [GraphQLName("createUser")] public User CreateUser(UserInput input) { // Logic to create a new user using the input data } } public class UserInput { public string Name { get; set; } public string Email { get; set; } } -
Разрешатели полей и манипулирование данными.
Разрешатели полей в мутациях Hot Chocolate позволяют манипулировать данными до или после их сохранения. Вот пример мутации, которая использует преобразователь полей для создания уникального имени пользователя для созданного пользователя:// Code example for a createUser mutation with a field resolver public class Mutation { [GraphQLName("createUser")] public User CreateUser(UserInput input, [Service] DbContext dbContext) { // Logic to create a new user using the input data // Generate a unique username user.Username = GenerateUniqueUsername(input.Name); // Save the user in the database dbContext.Users.Add(user); dbContext.SaveChanges(); return user; } } -
Обработка и проверка ошибок.
Горячий шоколад предоставляет встроенные механизмы обработки ошибок и проверки мутаций. Вы можете использовать такие атрибуты, как[Authorize]и[UseValidation], чтобы обеспечить соблюдение правил аутентификации и проверки данных. Вот пример:// Code example for a createUser mutation with error handling and validation [Authorize] public class Mutation { [GraphQLName("createUser")] [UseValidation] public User CreateUser(UserInput input, [Service] DbContext dbContext) { // Logic to create a new user using the input data // Generate a unique username user.Username = GenerateUniqueUsername(input.Name); // Save the user in the database dbContext.Users.Add(user); dbContext.SaveChanges(); return user; } } -
Авторизация и аутентификация.
Hot Chocolate легко интегрируется с библиотеками аутентификации и авторизации в экосистеме.NET. Вы можете использовать такие атрибуты, как[Authorize]и[AllowAnonymous], чтобы контролировать доступ к мутациям на основе ролей пользователей. Вот пример:// Code example for a createUser mutation with authorization rules [Authorize(Roles = "Admin")] public class Mutation { [GraphQLName("createUser")] [UseValidation] public UserCreateUser(UserInput input, [Service] DbContext dbContext) { // Logic to create a new user using the input data // Generate a unique username user.Username = GenerateUniqueUsername(input.Name); // Save the user in the database dbContext.Users.Add(user); dbContext.SaveChanges(); return user; } } -
Расширенные шаблоны мутаций.
Горячий шоколад поддерживает расширенные шаблоны мутаций, такие как пакетные мутации, загрузка файлов и вложенные мутации. Эти шаблоны позволяют эффективно обрабатывать более сложные сценарии манипулирования данными. Вот пример вложенной мутации:// Code example for a createUser mutation with nested mutations public class Mutation { [GraphQLName("createUser")] public User CreateUser(UserInput input, [Service] DbContext dbContext) { // Logic to create a new user using the input data // Create a nested address for the user user.Address = new Address { /* address properties */ }; dbContext.Addresses.Add(user.Address); // Save the user and address in the database dbContext.Users.Add(user); dbContext.SaveChanges(); return user; } } -
Тестирование мутаций.
Написание тестов для ваших мутаций необходимо для обеспечения их правильности и надежности. Hot Chocolate предоставляет утилиты тестирования, которые позволяют легко проверять ваши мутации и утверждения. Вот пример теста с использованием классаQueryTestBase:// Code example for testing a mutation using QueryTestBase public class MutationTests : QueryTestBase { [Fact] public async Task CreateUserMutation_ReturnsCreatedUser() { var mutation = @" mutation { createUser(input: { name: ""John Doe"", email: ""john@example.com"" }) { id name email } } "; var response = await PostAsync(new GraphQLRequest { Query = mutation }); response.MatchSnapshot(); } } -
В этой статье мы изучили мир мутаций «Горячего шоколада» и изучили различные методы их реализации. Мы рассмотрели базовую настройку мутаций, типы ввода, преобразователи полей, обработку ошибок, авторизацию, расширенные шаблоны мутаций и тестирование. Hot Chocolate предоставляет надежную и гибкую основу для создания API-интерфейсов GraphQL с мощными возможностями мутации.
Освоив мутации Hot Chocolate, вы сможете создавать эффективные и надежные API, которые позволят клиентам с легкостью изменять данные.
Не забудьте поэкспериментировать с предоставленными примерами кода и изучить официальную документацию по Hot Chocolate для получения более глубоких знаний.
Удачного программирования!