tanszek:oktatas:iss_t:graphql_integration
This is an old revision of the document!
GraphQL Integration
Official documentation:
Comparison of main characteristics with REST API.
| REST API | GraphQL | |
| Query flexibility | Fixed endpoints and responses | Flexible queries, only the required data is returned |
| Client performance | Multiple requests needed for different resources | Data from multiple sources can be queried in a single request |
| Data | Multiple queries may be needed for complex data | All required data can be fetched in a single request |
| Network efficiency | Network traffic increases with multiple requests | Reduces unnecessary data transfer and number of queries |
| Usability | Simple, widely known | More difficult to learn, but more efficient |
| Caching | HTTP cache and CDN supported | Harder to implement, requires custom caching strategy |
| Versioning | API versioning needed (e.g. `/v1/users`) | No versioning needed, the client selects the required fields |
| Handling schema changes | Changes may require new endpoints | New fields can be added while keeping the old ones |
| Security and access control | Built-in HTTP security, roles | Fine-grained access rules needed (e.g., field-level permissions) |
| Supported formats | Usually JSON (but others supported) | JSON-based (strictly follows GraphQL schema) |
| Use cases | Ideal for simple CRUD APIs | Better choice for complex, dynamic client needs |
After creating a Python virtual environment, you can install the required dependencies with the following command:
pip install fastapi strawberry-graphql uvicorn
Sample code for first use:
import strawberry
from fastapi import FastAPI
from strawberry.fastapi import GraphQLRouter
# User data model
@strawberry.type
class User:
id: int
name: str
age: int
# Example database
users = [
User(id=1, name="Noa", age=30),
User(id=2, name="Anna", age=25),
]
# GraphQL Query class
@strawberry.type
class Query:
@strawberry.field
def get_users(self) -> list[User]:
return users
# GraphQL Mutation class (add new user)
@strawberry.type
class Mutation:
@strawberry.mutation
def create_user(self, name: str, age: int) -> User:
new_user = User(id=len(users) + 1, name=name, age=age)
users.append(new_user)
return new_user
# Create GraphQL schema
schema = strawberry.Schema(query=Query, mutation=Mutation)
# Create FastAPI app
app = FastAPI()
# Register GraphQL endpoint
graphql_app = GraphQLRouter(schema)
app.include_router(graphql_app, prefix="/graphql")
uvicorn.exe main:app --reload
The GraphQL Playground will be available at the following URL: 👉 http://127.0.0.1:8000/graphql
tanszek/oktatas/iss_t/graphql_integration.1744043968.txt.gz · Last modified: 2025/04/07 16:39 by knehez
