В предыдущем посте я уже рассказывал о GraphQL, реализованном для чтения данных API, вы можете ознакомиться с ними здесь
В этом посте я расскажу о том, как реализовать API mutation GraphQL с помощью spring-boot.
Чтобы реализовать GraphQL mutation API, вам нужно 2 вещи.
- Графический файл, в котором мы определяем тип и объект
- Класс реализует мутацию GraphQL Распознаватель
Мы создадим API для создания нового сообщения в блоге (в исходном коде я также реализую аутентификацию и создаю новый пользовательский api с использованием мутации graphql, так что вы можете проверить больше)
- Графический файл
type Mutation{ createUserInfo(input: CreateUserInfo!) : Boolean! authenticateUserInfo(input: AuthenticateUserInfo!): JwtResponse! createBlog(input: CreateBlog!) : Blog! } input CreateUserInfo{ username: String! password: String! fullname: String! } input CreateBlog{ title: String! content: String! } input AuthenticateUserInfo{ username: String! password: String! } type JwtResponse{ token: String! }
Мутация типа – это то, где мы определяем, какие методы мы будем использовать для мутации
Мы определяем поля или объект в теле запроса по типу (например, введите Create User Info, введите Create Blog).
- Распознаватель мутаций GraphQL:
Нам нужно создать мутацию graphql для мутации блога, как показано ниже
import com.coxautodev.graphql.tools.GraphQLMutationResolver; import donald.apiwithspringboot.model.Blog; import donald.apiwithspringboot.model.mutation.CreateBlog; import donald.apiwithspringboot.repository.BlogRepository; import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @Component @AllArgsConstructor public class BlogMutation implements GraphQLMutationResolver { private BlogRepository blogRepository; @Transactional public Blog createBlog(CreateBlog body){ String title = body.getTitle(); String content = body.getContent(); return blogRepository.save(new Blog(title, content)); } }
3.Протестируйте graphql api с помощью postman: Вы можете использовать graphiql или postman. Но я уже рассказывал о graphiql в предыдущем посте, поэтому в этом посте я буду использовать postman.
Имейте в виду, что нам нужна аутентификация для любого URL-адреса, кроме URL, содержащего конечную точку типа “/user” или “/authenticate”, как определено в файле WebSecurityConfig
@Override protected void configure(HttpSecurity httpSecurity) throws Exception { httpSecurity.csrf().disable() .authorizeRequests().antMatchers("/authenticate","/user").permitAll(). anyRequest().authenticated().and(). exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint).and().sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS); httpSecurity.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class); httpSecurity.logout().logoutSuccessUrl("/authenticate").logoutUrl("/logout").permitAll(); }
Запустите приложение с помощью: mvn spring-boot: бежать
Сначала нам нужно получить токен с помощью authenticate api
И используйте этот токен для создания нового сообщения в блоге:
Как обычно, вы можете ознакомиться с исходным кодом для этого в github
Записи: Если вы чувствуете, что этот блог поможет вам, и хотите выразить признательность, не стесняйтесь заходить:
Это поможет мне внести более ценный вклад.
Оригинал: “https://dev.to/cuongld2/develop-graphql-mutation-api-with-spring-boot-20pd”