Изучение мутаций горячего шоколада: подробное руководство с примерами кода

В мире разработки GraphQL мутации играют решающую роль в изменении данных на стороне сервера. Hot Chocolate, популярная серверная библиотека GraphQL для.NET, предоставляет мощный и гибкий способ обработки мутаций. В этой статье мы погрузимся в область мутаций «Горячего шоколада» и рассмотрим различные методы их реализации, дополненные примерами кода.

Содержание:

  1. Что такое мутации?

  2. Знакомство с горячим шоколадом

  3. Создание проекта по производству горячего шоколада

  4. Базовая настройка мутации

  5. Типы входных данных и аргументы

  6. Резолверы полей и манипулирование данными

  7. Обработка и проверка ошибок

  8. Авторизация и аутентификация

  9. Расширенные шаблоны мутаций

  10. Тестирование мутаций

  11. Вывод

  12. Что такое мутации?
    Мутации в GraphQL — это операции, используемые для изменения данных на стороне сервера. Они аналогичны методам HTTP POST, PUT, PATCH и DELETE. Мутации позволяют клиентам отправлять данные на сервер и запрашивать изменения в базовом хранилище данных.

  13. Знакомство с горячим шоколадом.
    Горячий шоколад — это серверная библиотека GraphQL для.NET, которая предоставляет простой и элегантный способ создания API-интерфейсов GraphQL. Он предлагает богатый набор функций и инструментов для реализации мутаций, включая типы ввода, проверку аргументов, обработку ошибок и многое другое.

  14. Настройка проекта «Горячий шоколад».
    Чтобы начать работу с «Горячим шоколадом», вам необходимо настроить новый проект.NET. Вот пошаговое руководство, как это сделать:

    // Code example for setting up a Hot Chocolate project
    dotnet new web -n MyHotChocolateProject
    cd MyHotChocolateProject
    dotnet add package HotChocolate.AspNetCore
  15. Базовая настройка мутации:
    Давайте начнем с создания базовой мутации в горячем шоколаде. Вот пример простой мутации «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
    }
    }
  16. Типы входных данных и аргументы.
    Горячий шоколад позволяет определять типы входных данных и аргументы для мутаций. Это помогает в организации и проверке входных данных. Вот пример мутации, использующей тип ввода:

    // 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; }
    }
  17. Разрешатели полей и манипулирование данными.
    Разрешатели полей в мутациях 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;
    }
    }
  18. Обработка и проверка ошибок.
    Горячий шоколад предоставляет встроенные механизмы обработки ошибок и проверки мутаций. Вы можете использовать такие атрибуты, как [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;
    }
    }
  19. Авторизация и аутентификация.
    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;
    }
    }
  20. Расширенные шаблоны мутаций.
    Горячий шоколад поддерживает расширенные шаблоны мутаций, такие как пакетные мутации, загрузка файлов и вложенные мутации. Эти шаблоны позволяют эффективно обрабатывать более сложные сценарии манипулирования данными. Вот пример вложенной мутации:

    // 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;
    }
    }
  21. Тестирование мутаций.
    Написание тестов для ваших мутаций необходимо для обеспечения их правильности и надежности. 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();
    }
    }
  22. В этой статье мы изучили мир мутаций «Горячего шоколада» и изучили различные методы их реализации. Мы рассмотрели базовую настройку мутаций, типы ввода, преобразователи полей, обработку ошибок, авторизацию, расширенные шаблоны мутаций и тестирование. Hot Chocolate предоставляет надежную и гибкую основу для создания API-интерфейсов GraphQL с мощными возможностями мутации.

Освоив мутации Hot Chocolate, вы сможете создавать эффективные и надежные API, которые позволят клиентам с легкостью изменять данные.

Не забудьте поэкспериментировать с предоставленными примерами кода и изучить официальную документацию по Hot Chocolate для получения более глубоких знаний.

Удачного программирования!