Type Mutation trong GraphQL với Spring GraphQL và Spring Data R2DBC

Trong bài viết trước, mình đã hướng dẫn với các bạn type Query trong GraphQL và cũng đã sử dụng Spring GraphQL cùng với Spring Data R2DBC để hiện thực GraphQL request để truy vấn thông tin sinh viên. Để thêm mới, chỉnh sửa, xoá thông tin sinh viên với GraphQL, chúng ta cần sử dụng type Mutation. Cách hiện thực type Mutation với Spring GraphQL như thế nào? Hãy cùng nhau tìm hiểu với mình trong bài viết này các bạn nhé!

Đầu tiên, mình cũng sẽ tạo một Spring Boot project với Spring Web, Spring for GraphQL, Spring Data R2DBC và PostgreSQL Driver để làm ví dụ.

Kết quả:

Mình sẽ định nghĩa class Repository cho table “student”:

như sau:

với Student model có nội dung như sau:

Để làm ví dụ, mình đã tạo mới tập tin schema.graphqls định nghĩa type Mutation để thêm mới thông tin sinh viên trong database như sau:

Theo specification của GraphQL thì type Query là bắt buộc phải được định nghĩa trong mỗi GraphQL Schema các bạn nhé! Ở đây, mình chỉ định nghĩa đơn giản một field để lấy thông tin của tất cả sinh viên.

Với type Mutation, các bạn chỉ có thể sử dụng các scalar type như Int, Float, String, Boolean, và ID trong các tham số input của các fields. Để sử dụng các input nhiều thông tin, các bạn cần định nghĩa input type như mình đã làm như trên với input StudentInput. Các thông tin còn lại như type trả về, dấu “!” để chỉ định thông tin bắt buộc thì giống như định nghĩa của type Query các bạn nhé!

Để hiện thực type Mutation mà chúng ta định nghĩa ở trên với Spring GraphQL, các bạn có thể thêm mới một Controller có nội dung như sau:

Tương tự như type QueryMapping sử dụng annotation @QueryMapping, các bạn có thể sử dụng annotation @MutationMapping để hiện thực cho type Mutation. Annotation này cũng được xây dựng từ annotation @SchemaMapping với typeName là “Mutation” đó các bạn:

Mặc định thì Spring cũng scan và map tên method trong controller với field của type Mutation để process request từ người dùng các bạn nhé.

Chúng ta sẽ sử dụng annotation @Argument để bind các tham số được định nghĩa trong field của Mutation với tham số trong method handle request controller như các bạn thấy.

Bây giờ, nếu các bạn chạy ứng dụng lên rồi sau đó thử thêm mới sinh viên:

các bạn sẽ thấy kết quả như sau:

Lấy giá trị id của sinh viên mới thêm vào sau đó gọi request để cập nhập thông tin cho sinh viên này:

các bạn sẽ thấy kết quả như sau:

Bây giờ, nếu bạn xoá thông tin sinh viên này:

các bạn sẽ thấy kết quả như sau:

Add Comment