# SOFA > Turns a GraphQL schema into a REST API: every query, mutation and subscription becomes an endpoint, with OpenAPI documentation generated on the side. ## Documentation - [Introduction](https://the-guild.dev/graphql/sofa-api/docs.md): Sofa API: A GraphQL library to create fully RESTful and configurable API gateway. Get benefits of GraphQL and REST, support existing clients and generate documentation. Try now! #GraphQL #Sofa - [Queries](https://the-guild.dev/graphql/sofa-api/docs/essentials/queries.md): Learn how Sofa handles GraphQL queries, transforming them into GET requests. Example code provided to demonstrate query implementation with Sofa. #GraphQL - [Mutations](https://the-guild.dev/graphql/sofa-api/docs/essentials/mutations.md): Learn how to use mutations in Sofa, which transform into POST requests and require body-parser.json() middleware or URL parameters. #GraphQL - [Subscriptions](https://the-guild.dev/graphql/sofa-api/docs/essentials/subscriptions.md): Learn how to use Sofa to run GraphQL Subscriptions through Webhooks by starting, updating, and stopping a subscription with POST, DELETE, and PUT requests. #GraphQL - [OpenAPI (Swagger)](https://the-guild.dev/graphql/sofa-api/docs/recipes/open-api.md): Generate OpenAPI (Swagger) definitions from your GraphQL API using Sofa. Endless possibilities. Use OpenAPI and useSofa from sofa-api to create the Swagger definitions out of your schema. Add the routes to OpenAPI and save the file to './swagger.json'. #GraphQL - [Nested Data and Models](https://the-guild.dev/graphql/sofa-api/docs/api/models.md): Learn how Sofa handles nested data and Models in GraphQL. Use Models to avoid exposing full objects in every response and fetch single entities by ID. #GraphQL #Sofa - [Using Context](https://the-guild.dev/graphql/sofa-api/docs/api/context.md): Learn how to provide a context to a GraphQL Schema using Sofa. Use a factory function or pass data directly to create your context object. #GraphQL #Sofa - [Using Objects Instead of IDs](https://the-guild.dev/graphql/sofa-api/docs/api/ignore.md): Simplify GraphQL object handling with Sofa. Learn how to ignore the default ID behavior and send entire objects using the ignore parameter. #GraphQL #Sofa - [Custom Execute Phase](https://the-guild.dev/graphql/sofa-api/docs/api/execute.md): Take control of your GraphQL execution with Sofa. Learn how to pass your own logic using the execute function for custom operations, even with remote GraphQL servers. #GraphQL #Sofa - [Error Handling](https://the-guild.dev/graphql/sofa-api/docs/api/error-handler.md): Improve error handling in GraphQL with Sofa. Learn how to add a custom errorHandler function to log and format errors for a better user experience. #GraphQL #Sofa - [Customize Endpoint's HTTP Method](https://the-guild.dev/graphql/sofa-api/docs/api/method.md): Customize your GraphQL endpoint's HTTP method with Sofa. Learn how to easily switch between GET and POST using the routes parameter for specific queries or mutations. #GraphQL #Sofa ## Changelog