Integrations#
You can dive into full examples in the examples folder.
Flask#
from flask import Flask, request, jsonify
from hiku.graph import Graph, Root, Field
from hiku.types import String
from hiku.engine import Engine
from hiku.executors.sync import SyncExecutor
from hiku.endpoint.graphql import GraphQLEndpoint
app = Flask(__name__)
redis = Redis()
def say_hello(fields):
return ['Hello World!' for _ in fields]
QUERY_GRAPH = Graph([
Root([Field('hello', String, say_hello)]),
])
graphql_endpoint = GraphQLEndpoint(
Engine(SyncExecutor()), QUERY_GRAPH
)
@app.route('/graphql', methods={'POST'})
def graphql():
data = request.get_json()
context = {'redis': redis}
result = graphql_endpoint.dispatch(data, context)
return jsonify(result)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Aiohttp#
from aiohttp import web
from hiku.types import String
from hiku.graph import Graph, Root, Field
from hiku.engine import Engine
from hiku.endpoint.graphql import AsyncGraphQLEndpoint
from hiku.executors.asyncio import AsyncIOExecutor
def say_hello(fields):
return ['Hello World!' for _ in fields]
QUERY_GRAPH = Graph([
Root([Field('hello', String, say_hello)]),
])
async def handle_graphql(request):
data = await request.json()
context = {
'redis': request.app['redis'],
}
result = await request.app['graphql-endpoint'].dispatch(data, context)
return web.json_response(result)
if __name__ == "__main__":
app = web.Application()
app.add_routes([
web.post('/graphql', handle_graphql),
])
app['graphql-endpoint'] = AsyncGraphQLEndpoint(
Engine(AsyncIOExecutor()), QUERY_GRAPH
)
app['redis'] = Redis()
web.run_app(app, host='0.0.0.0', port=5000)
FastAPI#
import uvicorn
from fastapi import FastAPI, Request
from hiku.types import String
from hiku.graph import Graph, Root, Field
from hiku.engine import Engine
from hiku.endpoint.graphql import AsyncGraphQLEndpoint
from hiku.executors.asyncio import AsyncIOExecutor
def say_hello(fields):
return ['Hello World!' for _ in fields]
QUERY_GRAPH = Graph([
Root([Field('hello', String, say_hello)]),
])
app = FastAPI()
graphql_endpoint = AsyncGraphQLEndpoint(
Engine(AsyncIOExecutor()), QUERY_GRAPH
)
redis = Redis()
@app.post('/graphql')
async def handle_graphql(request: Request):
data = await request.json()
context = {
'redis': redis,
}
return await graphql_endpoint.dispatch(data, context)
if __name__ == "__main__":
uvicorn.run(__name__ + ":app", port=5000, host="0.0.0.0")