0.0.2 • Published 3 years ago

@keystone-6-master/example-extend-graphql-schema-nexus v0.0.2

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

Feature Example - Using Nexus to extend the GraphQL API

KeystoneJS and Nexus logos

This project demonstrates how to use Nexus to extend the GraphQL API provided by Keystone with custom queries and mutations. It builds on the Blog starter project.

Instructions

To run this project, clone the Keystone repository locally, run yarn at the root of the repository then navigate to this directory and run:

yarn dev

This will start the Admin UI at localhost:3000. You can use the Admin UI to create items in your database.

You can also access a GraphQL Playground at localhost:3000/api/graphql, which allows you to directly run GraphQL queries and mutations.

Features

This project demonstrates how to integrate Nexus with Keystone and use it to extend the GraphQL API. For a simpler version without Nexus, see the Extend GraphQL Schema example.

The Nexus schema is defined in /nexus. It's loosely inspired by the Nexus Tutorial

The resulting schema is then merged into Keystone's schema using @graphql-tools/schema

Current Limitations

Ideally, we could tell Nexus about the GraphQL types Keystone generates so you could write Nexus fields that return Keystone types. Making this work requires more research, so the example currently creates a separate NexusPost type and uses Prisma to query posts from the database.

There's also a Prisma plugin for Nexus in development here: https://github.com/prisma/nexus-prisma

When it's ready, it would make a good addition to this example (showing how to integrate the Prisma plugin with the Keystone-generated Prisma schema to auto-generate Nexus schema)

Try it out in Code Sandbox 🧪

You can play with this example online in a web browser using the free codesandbox.io service. To launch this example, open the URL https://githubbox.com/keystonejs/keystone/tree/main/examples/extend-graphql-schema-nexus. You can also fork this sandbox to make your own changes.