top of page

GraphQL

  • Writer: Anand Nerurkar
    Anand Nerurkar
  • Jun 20, 2024
  • 2 min read

Updated: Oct 4, 2024

GraphQL is a query language for your API.


Say API return 100 fields in a response , we have various client and each client need different fileds in their response, then GraphQL describe those need and return those only fileds as a response.



ree
ree
ree

ree

Client just need to describe which field they need, GraphQL will take care of that.


need to create schema file for gaphql as below in graphql folder.

==

type Product{

id: ID,

name:String

category:String

price:Float

stock:Int

}



type Query{

getProducts:[Product]

getProductsByCategory(category:String):[Product]

}


type Mutation{

updateStock(id:ID,stock:Int):Product

receiveNewShipment(id:ID,quantity:Int):Product

}


#Enabling GraphQL playground


spring.graphql.graphiql.enabled=true

spring.graphql.graphiql.path=/graphiql


Replace RestController with only Controller , GetMapping with QuryMapping, PostMapping with MutationMapping


@Controller

public class ProductController {


@Autowired

private ProductService service;



@QueryMapping/fetch/retireve operation

public List<Product> getProducts() {

return service.getProducts();

}


@QueryMapping//fetch/retireve operation

public List<Product> getProductsByCategory(@Argument String category) {

return service.getProductsByCategory(category);

}



@MutationMapping//for update/delete operation

public Product updateStock(@Argument int id, @Argument int stock) {

return service.updateStock(id, stock);


}


@MutationMapping//for update/delete operation

@SubscriptionMapping

public Product receiveNewShipment(@Argument int id, @Argument int quantity) {

return service.receiveNewShipment(id, quantity);


}

}


How to consume GraphQL service with graphql client

==

As a part of configuration, get graphqlclient bean as below


@Configuration

public class GraphQLClientConfig {



@Bean

public HttpGraphQlClient graphQlClient() {


WebClient webClient = WebClient.builder()

.baseUrl("http://localhost:9191/graphql")

.build();


return HttpGraphQlClient.builder(webClient).build();

}

}


let us write a client class

==

@Component

public class InventoryClient {


@Autowired

private HttpGraphQlClient graphQlClient;



public List<Item> viewProducts() {

String graphQLQuery = "query GetProducts {\n" +

" getProducts {\n" +

" name\n" +

" price\n" +

" }\n" +

"}";


return graphQlClient.document(graphQLQuery)

.retrieve("getProducts")

.toEntityList(Item.class).block();

}



public List<Item> viewProductsByCategory(String category) {


String graphQLQuery = String.format("query GetProductsByCategory {\n" +

" getProductsByCategory(category: \"%s\") {\n" +

" name\n" +

" category\n" +

" price\n" +

" stock\n" +

" }\n" +

"}\n", category);


return graphQlClient.document(graphQLQuery)

.retrieve("getProductsByCategory")

.toEntityList(Item.class).block();

}


public Item receiveNewShipment(ItemRequestDTO itemRequest) {

String graphQlQuery = String.format("mutation ReceiveNewShipment {\n" +

" receiveNewShipment(id: \"%s\", quantity: %d) {\n" +

" name\n" +

" price\n" +

" stock\n" +

" }\n" +

"}\n", itemRequest.getId(), itemRequest.getQty());

return graphQlClient.document(graphQlQuery)

.retrieve("receiveNewShipment")

.toEntity(Item.class).block();

}

}


 
 
 

Recent Posts

See All
AI Risk Metrices

🏦 KEY BANKING RISK METRICS (EXPLAINED SIMPLY) 🔍 What is AUC  (in Credit / Risk Models)? AUC = Area Under the ROC Curve In simple terms: AUC measures how well a model can distinguish between good and

 
 
 
Gen AI USe case Estimation

✅ How to Build Estimation for a GenAI Use Case Step 1: Identify the Use Case Scope What business problem are you solving? (Customer support, document processing, fraud detection, etc.) Who are the end

 
 
 

Comments

Rated 0 out of 5 stars.
No ratings yet

Add a rating
  • Facebook
  • Twitter
  • LinkedIn

©2024 by AeeroTech. Proudly created with Wix.com

bottom of page