]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
:sparkles: Add docs for GraphQL (#48)
authorSebastián Ramírez <tiangolo@gmail.com>
Wed, 20 Feb 2019 17:58:26 +0000 (21:58 +0400)
committerGitHub <noreply@github.com>
Wed, 20 Feb 2019 17:58:26 +0000 (21:58 +0400)
docs/img/tutorial/graphql/image01.png [new file with mode: 0644]
docs/src/graphql/tutorial001.py [new file with mode: 0644]
docs/tutorial/graphq.md [new file with mode: 0644]
mkdocs.yml

diff --git a/docs/img/tutorial/graphql/image01.png b/docs/img/tutorial/graphql/image01.png
new file mode 100644 (file)
index 0000000..2955cf1
Binary files /dev/null and b/docs/img/tutorial/graphql/image01.png differ
diff --git a/docs/src/graphql/tutorial001.py b/docs/src/graphql/tutorial001.py
new file mode 100644 (file)
index 0000000..41da361
--- /dev/null
@@ -0,0 +1,14 @@
+import graphene
+from fastapi import FastAPI
+from starlette.graphql import GraphQLApp
+
+
+class Query(graphene.ObjectType):
+    hello = graphene.String(name=graphene.String(default_value="stranger"))
+
+    def resolve_hello(self, info, name):
+        return "Hello " + name
+
+
+app = FastAPI()
+app.add_route("/", GraphQLApp(schema=graphene.Schema(query=Query)))
diff --git a/docs/tutorial/graphq.md b/docs/tutorial/graphq.md
new file mode 100644 (file)
index 0000000..45a85d4
--- /dev/null
@@ -0,0 +1,44 @@
+
+**FastAPI** has optional support for GraphQL (provided by Starlette directly), using the `graphene` library.
+
+You can combine normal FastAPI path operations with GraphQL on the same application.
+
+## Import and use `graphene`
+
+GraphQL is implemented with Graphene, you can check <a href="https://docs.graphene-python.org/en/latest/quickstart/" target="_blank">Graphene's docs</a> for more details.
+
+Import `graphene` and define your GraphQL data:
+
+```Python hl_lines="1 6 7 8 9 10"
+{!./src/graphql/tutorial001.py!}
+```
+
+## Add Starlette's `GraphQLApp`
+
+Then import and add Starlette's `GraphQLApp`:
+
+```Python hl_lines="3 14"
+{!./src/graphql/tutorial001.py!}
+```
+
+!!! info
+    Here we are using `.add_route`, that is the way to add a route in Starlette (inherited by FastAPI) without declaring the specific operation (as would be with `.get()`, `.post()`, etc).
+
+## Check it
+
+Run it with Uvicorn and open your browser at <a href="http://127.0.0.1:8000" target="_blank">http://127.0.0.1:8000</a>.
+
+You will see GraphiQL web user interface:
+
+<img src="/img/tutorial/graphql/image01.png">
+
+
+## More details
+
+For more details, including:
+
+* Accessing request information
+* Adding background tasks
+* Using normal or async functions
+
+check the official <a href="https://www.starlette.io/graphql/" target="_blank">Starlette GraphQL docs</a>.
index b99021a085f2fe0cd8e6bb655e14275ddb2abba0..b6cae2fbea0bfc2d54fc9975c21a7aae13fa183f 100644 (file)
@@ -61,6 +61,7 @@ nav:
         - Bigger Applications - Multiple Files: 'tutorial/bigger-applications.md'
         - Sub Applications - Behind a Proxy: 'tutorial/sub-applications-proxy.md'
         - Application Configuration: 'tutorial/application-configuration.md'
+        - GraphQL: 'tutorial/graphq.md'
     - Concurrency and async / await: 'async.md'
     - Deployment: 'deployment.md'
     - Project Generation - Template: 'project-generation.md'