Skip to Content
Yoga
⚠️
Warning

This is the documentation for the old GraphQL Yoga v3.
We recommend upgrading to the latest GraphQL Yoga v5. Migrate to GraphQL Yoga v5.

Sofa API

Sofa takes your GraphQL Schema, looks for available queries, mutations and subscriptions and turns all of that into REST API.

Installation

Terminal
yarn add @graphql-yoga/plugin-sofa

Example

server.ts
import { createServer } from 'http' import { createSchema, createYoga } from 'graphql-yoga' import { useSofa } from '@graphql-yoga/plugin-sofa' const books = [ { id: 1, title: 'Book A', type: 'AUDIO' }, { id: 2, title: 'Book B', type: 'LEGACY' } ] const users = [ { id: 1, name: 'User A', favoriteBook: books[0], shelf: books }, { id: 2, name: 'User B', favoriteBook: books[1], shelf: books } ] const UsersCollection = { get(id: string | number) { const uid = typeof id === 'string' ? parseInt(id, 10) : id return users.find((u) => u.id === uid) }, all() { return users } } const BooksCollection = { get(id: string | number) { const bid = typeof id === 'string' ? parseInt(id, 10) : id return books.find((u) => u.id === bid) }, all() { return books }, add(title: string) { const book = { id: parseInt(Math.random().toString(10).substr(2), 10), title, type: 'LEGACY' } books.push(book) return book } } const schema = createSchema({ typeDefs: /* GraphQL */ ` type Book { id: ID! title: String! type: BookType! } enum BookType { AUDIO LEGACY } type User { id: ID! name: String! favoriteBook: Book! shelf: [Book!]! } type Query { user(id: ID!): User users: [User!] book(id: ID!): Book books: [Book!] } type Mutation { addBook(title: String!): Book } schema { query: Query mutation: Mutation } `, resolvers: { Query: { user(_: any, { id }: any) { return UsersCollection.get(id) }, users() { return UsersCollection.all() }, book(_: any, { id }: any) { return BooksCollection.get(id) }, books() { return BooksCollection.all() } }, Mutation: { addBook(_: any, { title }: any) { const book = BooksCollection.add(title) return book } } } }) export const yoga = createYoga({ schema, plugins: [ useSofa({ basePath: '/rest', swaggerUIEndpoint: '/swagger', title: 'Example API', version: '1.0.0' }) ] }) const server = createServer(yoga) server.listen(4000, () => { console.info('Server is running on http://localhost:4000/graphql') })

You can start the server and visit http://localhost:4000/swagger to see the Swagger UI.