GraphQl aliases are used to prevent errors of GraphQL fields conflict type in the response of the query.
Using Aliases in the query to fix the issue of the conflicting type of GraphQl while same type of arguments are used in a query.
Let’s say a real example to understand these aliases.
{
products(filter: {sku: {eq: "100001"}}) {
items {
uid
name
... on CustomizableProductInterface {
options {
title
required
sort_order
uid
... on CustomizableFieldOption {
value {
sku
price
}
}
... on CustomizableDropDownOption {
value {
sku
price
}
}
}
}
}
}
}
Here CustomizableFieldOption and CustomizableDropDownOption both type are implementing the same interface called CustomizableOptionInterface.
Henceforth when you try to execute the query, you will face an error called,
{
"errors": [
{
"message": "Fields \"value\" conflict because they return conflicting types CustomizableFieldValue and [CustomizableDropDownValue]. Use different aliases on the fields to fetch both if this was intentional.",
"extensions": {
"category": "graphql"
},
"locations": [
{
"line": 15,
"column": 13
},
{
"line": 21,
"column": 13
}
]
}
]
}
Here we will update the query to resolve the above error by adding aliases to the value parameter.
You can add aliases like aliasName: fieldName
This format is more readable and understands easily in the query by adding alias like below,
- For an example of adding an alias to the field name,
In the first type, We are adding textField as Alias to the value argument,
textField: value {
sku
price
}
Second type by adding a dropDown as an alias to the value argument,
dropDown: value {
sku
price
}
The final query to fetch with products by filtering SKU,
{
products(filter: {sku: {eq: "100001"}}) {
items {
uid
name
sku
__typename
... on CustomizableProductInterface {
options {
title
required
sort_order
uid
... on CustomizableFieldOption {
field: value {
sku
price
}
}
... on CustomizableDropDownOption {
dropdown: value {
sku
price
}
}
}
}
}
}
}
The final result response without error:
{
"data": {
"products": {
"items": [
{
"uid": "MjA0Nw==",
"name": "Shree1",
"sku": "100001",
"__typename": "SimpleProduct",
"options": [
{
"title": "Welcome Message",
"required": true,
"sort_order": 1,
"uid": "Y3VzdG9tLW9wdGlvbi8x",
"textField": {
"sku": "100001-welcome",
"price": 10
}
},
{
"title": "Hobby",
"required": true,
"sort_order": 2,
"uid": "Y3VzdG9tLW9wdGlvbi8y",
"dropDown": [
{
"sku": null,
"price": 20
},
{
"sku": null,
"price": 10
},
{
"sku": null,
"price": 15
}
]
}
]
}
]
}
}
}
