Example Using GraphQL
Toy Store API with GraphQL: A Hands-on Example
This example showcases a basic GraphQL API for a toy store, demonstrating the schema, queries, and mutations.
Schema:
type Toy {
id: ID!
name: String!
price: Float!
category: String!
inStock: Boolean!
}
type Query {
toys(category: String): [Toy!]!
toy(id: ID!): Toy
}
type Mutation {
createToy(name: String!, price: Float!, category: String!): Toy!
}
Explanation:
Types:
Toy
: Represents a toy object with properties likeid
,name
,price
,category
, andinStock
.Query
: Defines available data retrieval operations.Mutation
: Defines data manipulation operations (optional, not all APIs have mutations).
Query:
toys(category: String)
: Retrieves a list of toys based on an optional category filter.toy(id: ID!)
: Fetches a specific toy by its ID.
Mutation:
createToy(name: String!, price: Float!, category: String!)
: Creates a new toy with provided details.
Query Example (Get all toys):
query {
toys
}
Response:
{
"data": {
"toys": [
{
"id": "1",
"name": "Stuffed Bear",
"price": 19.99,
"category": "Plushies",
"inStock": true
},
{
"id": "2",
"name": "Remote Control Car",
"price": 49.99,
"category": "Vehicles",
"inStock": false
}
]
}
}
Query Example (Get a toy by ID):
query getToy($id: ID!) {
toy(id: $id) {
id
name
price
}
}
Variables:
{
"id": "1"
}
Response:
{
"data": {
"toy": {
"id": "1",
"name": "Stuffed Bear",
"price": 19.99
}
}
}
Mutation Example (Create a new toy):
mutation createToy($name: String!, $price: Float!, $category: String!) {
createToy(name: $name, price: $price, category: $category) {
id
name
price
category
}
}
Variables:
{
"name": "Building Blocks",
"price": 24.99,
"category": "Construction"
}
Response:
{
"data": {
"createToy": {
"id": "3", // Generated by the server
"name": "Building Blocks",
"price": 24.99,
"category": "Construction"
}
}
}
This example demonstrates the fundamental concepts of using a GraphQL API. By understanding the schema, you can craft queries to retrieve specific data and potentially use mutations to interact with the data (if supported).
Was this helpful?