Translate APIs described by OpenAPI Specifications (OAS) into GraphQL

Overview

GitHub last commit Join the chat at https://gitter.im/IBM/openapi-to-graphql

OpenAPI-to-GraphQL

Translate APIs described by OpenAPI Specifications (OAS) or Swagger into GraphQL.

Overview of translation

Getting started

OpenAPI-to-GraphQL can be used in two ways:

CLI

The Command Line Interface (CLI) provides a convenient way to start a GraphQL server wrapping an API for a given OpenAPI Specification:

  1. Install the OpenAPI-to-GraphQL CLI using:
    npm i -g openapi-to-graphql-cli
  2. Then, run the OpenAPI-to-GraphQL command and point it to an OpenAPI Specification:
    openapi-to-graphql <OAS JSON file path or remote url> [options]

For further details, refer to the openapi-to-graphql-cli documentation.

Library

Use OpenAPI-to-GraphQL as a library in your application to generate GraphQL schemas.

  1. Install OpenAPI-to-GraphQL as a dependency:
    npm i -s openapi-to-graphql
  2. Require OpenAPI-to-GraphQL and use the createGraphQLSchema function:
    const { createGraphQLSchema } = require("openapi-to-graphql");
    // load or construct OAS (const oas = ...)
    const { schema, report } = await createGraphQLSchema(oas);

For further details, refer to the openapi-to-graphql documentation.

Tutorials

Here are some guides to further help you get started:

  • CLI + Loopback tutorial: Learn how to quickly spin up GraphQL wrappers using the OpenAPI-to-GraphQL CLI.
  • Library tutorial: Learn how to use OpenAPI-to-GraphQL as a library, and how to improve the resulting GraphQL wrappers using OAS link definitions.
  • LoopBack tutorial: Learn how to use OpenAPI-to-GraphQL to create GraphQL wrappers for APIs created with LoopBack 4.
  • Subscriptions tutorial: Learn how to create a GraphQL API that supports subscription operations - including how to set up the API server that creates a PubSub instance wrapping a MQTT client.

Characteristics

  • Data-centric The GraphQL interface is created around the data definitions in the given OAS, not around the endpoints, leading to a natural use of GraphQL.

    Example of data-centric design
  • Nested data Links defined in the OAS are used to create nested data structures, allowing for (deeply) nested queries.

    Example of links resolution
  • Automatic query resolution Automatically generated resolvers translate (nested) GraphQL queries to API requests. Request results are translated back to GraphQL responses.

    Example of query resolution
  • Mutations Non-safe, non-idempotent API operations (e.g., POST, PUT, DELETE) are translated to GraphQL mutations. Input payload is type-checked.

    Example of mutation
  • Subscriptions GraphQL subscriptions allow clients to receive a stream of events, such as updates whenever data changes on the GraphQL server. OpenAPI-to-GraphQL can create subscriptions based on callback objects defined in the OAS.

    Example of subscription
  • Authentication OpenAPI-to-GraphQL currently supports authentication via API Key and basic auth. OpenAPI-to-GraphQL wraps secured endpoints into a viewer, which takes the API key / credentials as input.

    Example of authentication
  • API Sanitation Parts of an API that not compatible with GraphQL are automatically sanitized. For example, API parameters and data definition names with unsupported characters (e.g., -, ., ,, :, ;...) are removed. GraphQL queries are desanitized to correctly invoke the REST API and the responses are resanitized to create GraphQL-compliant results.

    Example of sanitation
  • Custom request options Provide headers and query parameters to send with every API request. This allows, for example, to handle authentication or tag requests from GraphQL.

  • Swagger and OpenAPI 3 support OpenAPI-to-GraphQL can handle both Swagger (OpenAPI specification 2.0) as well as OpenAPI specification 3.

Development

OpenAPI-to-GraphQL is written in TypeScript. Within each of OpenAPI-to-GraphQL's packages, all source code is contained in the src folder. Use npm run build or npm test to transpile the source files into the final library in the lib folder. Entry-point for the library is index.js in lib.

Research

Our research paper, "Generating GraphQL-Wrappers for REST(-like) APIs", can be found here. The paper describes the challenges of building OpenAPI-to-GraphQL and an experiment in which we evaluated OpenAPI-to-GraphQL against 959 publicly available OAS, provided by APIs.guru, and successfully created GraphQL interfaces for 89.5% of them.

To run the experiment, in the openapi-to-graphql package, load APIs.guru specifications, found here, into the /tmp folder:

npm run guru-load

Then, run tests:

npm run guru-test <number of APIs to test at most>

Similar projects

  • swagger-to-graphql turns a given Swagger (OpenAPI Specification 2.0) into a GraphQL interface, which resolves against the original API. GraphQL schema is based on endpoints, not on data definitions. No links are considered.

  • json-to-graphql turns given JSON objects / arrays into a GraphQL schema. resolve functions need to be provided by the user.

  • StackOverflow discussion points to the above projects.

License

MIT

Comments
  • Cannot generate grapqhl schema for Stripe API

    Cannot generate grapqhl schema for Stripe API

    Describe the bug Not able to generate Graphql Schema with openapi-to-graphql cli using Stripe's API OAS definition

    To Reproduce Steps to reproduce the behavior:

    1. install the openapi-to-graphql-cli
    2. try generating schema by running: openapi-to-graphql https://api.apis.guru/v2/specs/stripe.com/2019-03-14/swagger.json

    Expected behavior The graphql server starts with generated Stripe API schema

    Actual result Getting the following error:

    openapi-to-graphql https://api.apis.guru/v2/specs/stripe.com/2019-03-14/swagger.json(node:54348) ExperimentalWarning: The http2 module is an experimental API.
    OpenAPI-to-GraphQL creation event error:  Cannot read property 'schema' of null
    

    Additional context Up to date latest OAS Stripe's spec can be grabbed here: https://github.com/stripe/openapi/blob/master/openapi/spec3.json *same generation result as described above

    opened by keblodev 26
  • Parse callbacks from Open API and create subscriptions

    Parse callbacks from Open API and create subscriptions

    After reading #80, here is a proposal on a way to handle callbacks and create corresponding subscription fields.

    There is only one test for now, i would like your feedback to know if you agree with the choices made, before expanding test phases.

    Signed-off-by: Edouard Maleix [email protected]

    opened by getlarge 24
  • POST Queries?

    POST Queries?

    A simple question:

    Openapi-to-Graphql sees some of the endpoints as mutations. However, these are not really mutations, they are queries. All these require a POST request to be sent instead of a GET, since they have several parameters and it's easier to transmit those in the request body.

    Can I make Openapi-to-Graphql to handle these as Queries? Do I have to edit the generated GraphQL schema manually to achieve this?

    opened by gtamas 23
  • Add ability to customize graphql schema with OAS extensions

    Add ability to customize graphql schema with OAS extensions

    Hi there 👋

    First of all, thanks for the awesome library. We've been using it at @apideck-io with great success!

    Recently we forked the repo because we needed granular control over the naming of certain schemas/operations. It's not always possible to use title fields or similar, since we have other tooling using those as well. We needed a way to customise naming specifically for GraphQL.

    We came up with a solution using OpenAPI extensions. We think it could be useful to other users of openapi-to-graphql so we're contributing it back 🎉

    Let me know if you're interested in having something like this, otherwise we'll keep it in our fork :smile:

    Here's an API spec I used for testing: https://gist.github.com/elsmr/ac35f5dc7dbf7a42e60276f688955640. I also included the graphql schema output before & after.

    There's also more features that could be added using this approach, for example a property whitelist for schemas etc.

    Cheers

    image

    opened by elsmr 17
  • Auto parse fields from snake_case to camelCase on schema fields

    Auto parse fields from snake_case to camelCase on schema fields

    Hi! We have a problem about auto parsing snake_case to camelCase of schema fields. How we can disable this? We have fields of model for example "target_id" and don't want to parse to "targetId".

    The same problem occurs when the reponse is JSON graphql type: {"DATA1": "something"}

    parsed to:

    {"dATA1": "something"}

    Thanks

    enhancement 
    opened by josepmorey 17
  • Getting Started

    Getting Started

    For http://v4.loopback.io/getting-started-oasgraph.html some things should be changed.

    As per a user comment (https://github.com/strongloop/loopback-next/issues/1762), for git clone it's more preferable to use the https link instead of the ssh link.

    That would be a short term thing. As per https://github.com/strongloop/v4.loopback.io/issues/43 the Developer Experience of having to link a dependency is very poor. It's much more preferable to have the following:

    npm i -g oasgraph
    oasgraph ./openapi.json
    

    and for production a user can install the dependency via package.json and build out a npm script as follows:

    start: ./node_modules/oasgraph ./openapi.json
    

    And then be able to run npm start


    Lastly the getting started page is very all over the place and not a good guide to "get started" as it currently stands as it assumes a user has an app already.

    A much better Getting Started would be to say that lets build on LoopBack's Getting Started ... or add a step to clone a project from LoopBack 4 as follows:

    npm i -g @loopback/cli
    lb4 example todo
    cd example todo // You can even point to LB Documentation for this but it's better if it's all on 1 page. 
    npm i oasgraph // After this is available via npm
    npm start
    // Visit /openapi.json and save to disk at './openapi.json' --> Maybe we can provide a script to pull it from server and save to disk?
    Ctrl+C
    // Add a command to package.json as follows:
    > start:oasgraph: "./node_modules/oasgraph ./openapi.json"
    npm run start:oasgraph
    // Visit GraphQL Link
    
    opened by virkt25 16
  • FAIL  test/example_api.test.js on master

    FAIL test/example_api.test.js on master

    Hello guys,

    The test/example_api.test.js is currently broken on master. Stack (npm run test):

    `● Link parameters as constants and variables with request payload

    expect(received).toEqual(expected)
    
    Difference:
    
    - Expected
    + Received
    
      Object {
    -   "data": Object {
    -     "postScanner": Object {
    -       "body": "req.body: body, req.query.query: query, req.path.path: path",
    -       "everythingLink2": Object {
    -         "body": "http://localhost:3002/api/scanner/path_post_200_body_query_path_application/json_req.body: body, req.query.query: query, req.path.path: path_query_path_close",
    -       },
    -     },
    -   },
    +   "errors": Array [
    +     [GraphQLError: Cannot query field "everythingLink2" on type "Scanner". Did you mean "everythingLink"?],
    +   ],
      }
    
      286 |   }`
      287 |   return graphql(createdSchema, query).then(result => {
    > 288 |     expect(result).toEqual({
          |                    ^
      289 |       data: {
      290 |         "postScanner": {
      291 |           "body": "req.body: body, req.query.query: query, req.path.path: path",
    
      at toEqual (test/example_api.test.js:288:20)
    

    `

    opened by thejibz 13
  • Missing Query Schemas

    Missing Query Schemas

    I recently reported in issue #92 that I now no longer produce an OAS in Swagger 2.0 format but now produce one in OpenApi 3.0.1 format. :

    swagger.txt

    Even though I seem to get better results with that, the results are still somewhat disappointing when using OASGraph to generate the schema and trying to use the generated OAS in GraphiQL.

    The following problems still occur:

    1. SearchOrders (and possibly others) is missing from the schema and docs even though it's in the Swagger.json file.

    2. Also, as mentioned in issue #107 how can I get the docs to present the schema in alphabetical order?

    opened by simax 13
  • MISSING_RESPONSE_SCHEMA warnings

    MISSING_RESPONSE_SCHEMA warnings

    Hi,

    Im trying to use openapi-to-graphql to convert this OAS to graphql -https://app.swaggerhub.com/apis/OpenChannel/Market-API/2.0.25

    I've download the schema and I'm using this command to process it:

    openapi-to-graphql OpenChannel-Market-API-2.0.25-resolved.yaml

    However, I'm getting multiple warnings as follows:

    "warnings": [
        {
          "type": "MISSING_RESPONSE_SCHEMA",
          "message": "Operation GET /apps has no (valid) response schema. You can use the fillEmptyResponses option to create a placeholder schema",
          "mitigation": "Ignore operation."
        },
        {
          "type": "MISSING_RESPONSE_SCHEMA",
          "message": "Operation POST /apps has no (valid) response schema. You can use the fillEmptyResponses option to create a placeholder schema",
          "mitigation": "Ignore operation."
        },
        {
          "type": "MISSING_RESPONSE_SCHEMA",
          "message": "Operation GET /apps/{appId} has no (valid) response schema. You can use the fillEmptyResponses option to create a placeholder schema",
          "mitigation": "Ignore operation."
        } .......
    
    ,
      "numOps": 86,
      "numOpsQuery": 34,
      "numOpsMutation": 52,
      "numOpsSubscription": 0,
      "numQueriesCreated": 0,
      "numMutationsCreated": 0,
      "numSubscriptionsCreated": 0
    

    I think the problem is related to the sections of the OAS file that look like this:

    "responses": {
              "400": {
                "description": "Bad Request - Required parameters are missing, malformed or invalid"
              },
              "default": {
                "description": "OK",
                "schema": {
                  "$ref": "#/definitions/AppPages"
                }
              }
            }
          },
    

    i.e. the $ref statement and it not linking to the definitions section.

    Is there anything I can do to resolve this ?

    opened by carlskii 11
  • Added selectQueryOrMutationField option

    Added selectQueryOrMutationField option

    selectQueryOrMutationField: override the GQL type (mutation or query) of any operation. PR contains the logic, types etc.

    Tests and docs are yet to be added.

    opened by gtamas 10
  • fillEmptyResponses

    fillEmptyResponses

    Describe the bug We have POST and Delete operations that do not return any JSON responses and hence we do not define any response schema in the v2 OAS file in these particular cases. This causes warning in the console when we try to generate the wrapper using OASGraph.


    "warnings": [ { "type": "MissingResponseSchema", "message": "Operation 'POST /v1/persons/{concern_role_id}/special_cautions' has no (valid) response schema. You can create placeholder schemas using the fillEmptyResponses option.", "mitigation": "Ignore operation" }, { "type": "MissingResponseSchema", "message": "Operation 'DELETE /v1/persons/{concern_role_id}/special_cautions/{special_caution_id}' has no (valid) response schema. You can create placeholder schemas using the fillEmptyResponses option.", "mitigation": "Ignore operation" }, { "type": "MissingResponseSchema", "message": "Operation 'POST /v1/outcome_plans/{outcome_plan_id}/attachments' has no (valid) response schema. You can create placeholder schemas using the fillEmptyResponses option.", "mitigation": "Ignore operation" },

    ............


    I have tried setting the option "fillEmptyResponses: true" and this does substantially reduce the number of warnings especially Delete operations, but some still remain.


    "warnings": [ { "type": "MissingResponseSchema", "message": "Operation 'POST /v1/persons/{concern_role_id}/special_cautions' has no (valid) response schema. You can create placeholder schemas using the fillEmptyResponses option.", "mitigation": "Ignore operation" }, { "type": "MissingResponseSchema", "message": "Operation 'POST /v1/outcome_plans/{outcome_plan_id}/attachments' has no (valid) response schema. You can create placeholder schemas using the fillEmptyResponses option.", "mitigation": "Ignore operation" },

    ........


    Expected behavior Setting the option to fill empty responses should fill all REST resources with empty responses

    Screenshots If applicable, add screenshots to help explain your problem.

    Additional context Add any other context about the problem here.

    bug 
    opened by michaelsearles 10
  • Correctly defined 204 will return Response does not have a Content-Type header

    Correctly defined 204 will return Response does not have a Content-Type header

    Describe the bug Based on https://swagger.io/docs/specification/describing-responses/ (Empty Response Body) the definition for 204 should look like this:

    {
      ...,
      "paths": {
        "/tests": {
          "get": {
            "tags": [
              "test-controller"
            ],
            "operationId": "getTests",
            "parameters": [...],
            "responses": {
              "200": {
                "description": "OK",
                "content": {
                  "application/json": {
                    "schema": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Test"
                      }
                    }
                  }
                }
              },
              "204": {
                "description": "Empty list"
              },
              "502": {
                "description": "Invalid Response",
                "content": {
                  "application/json": {}
                }
              },
              "504": {
                "description": "No Response",
                "content": {
                  "application/json": {}
                }
              }
            }
          }
        }
      },
      ...
    }
    

    But in that case I get the following error:

    {
      "data": null,
      "errors": [
        {
          "extensions": {
            "code": "INTERNAL_SERVER_ERROR"
          },
          "locations": [
            {
              "column": 17,
              "line": 1
            }
          ],
          "message": "Response does not have a Content-Type header",
          "path": [
            "tests"
          ]
        }
      ]
    }
    

    There's indeed no Content-Type header since there's no Content.

    To Reproduce Steps to reproduce the behavior: See above

    Expected behavior No error should occur

    opened by dtrunk90 0
  • Any way to solve the N + 1 problem when I use Nest Object

    Any way to solve the N + 1 problem when I use Nest Object

    https://medium.com/the-marcy-lab-school/what-is-the-n-1-problem-in-graphql-dd4921cb3c1a

    I am trying to use nest object feature and it work well,but if we use it in list query, N +1 problem comes. Is there any way to solve the N + 1 problem when I use Nest Object?

    opened by Acring 0
  • Fix setting null value in query params with style

    Fix setting null value in query params with style "form"

    Because in js typeof null === 'object' we need additional check, otherwise Object.entries(args[saneParamName]) will fail with:

    TypeError: Cannot convert undefined or null to object
    
    opened by adascal 0
  • should have a content-type 'application/json' but has 'application/vnd.api+json'

    should have a content-type 'application/json' but has 'application/vnd.api+json'

    Describe the bug We're trying to expose a UK gov API with the following spec: https://api.publish-teacher-training-courses.service.gov.uk/api-docs/public_v1/api_spec.json

    Unfortunately, they decided to implement it using the content type application/vnd.api+json.

    Currently, the resolver code in this project is only ever treating application/json as a first-class citizen; after changing the spec to have a content type of application/vnd.api+json, the number of entries that appear in the query section reduce signficantly. Please start treating application/vnd.api+json and application/json as synonyms.

    To Reproduce Steps to reproduce the behavior:

    1. Download this file
    2. Globally Replace 'float' with number, and save it as file spec.json
    3. create the following index.js app:
    const express = require('express')
    const {graphqlHTTP} = require('express-graphql')
    const {createGraphQLSchema} = require('openapi-to-graphql')
    const oas = require('./spec.json');
    
    async function main(oas) {
      // generate schema:
      const {schema, report} = await createGraphQLSchema(oas, {
        strict: false
      })
    
      // server schema:
      const app = express()
      app.use(
        '/graphql',
        graphqlHTTP({
          schema,
          graphiql: true,
    
    
        })
      )
      app.listen(3001)
    }
    
    main(oas)
    
    
    
    1. create the following package.json file:
    {
      "name": "gql",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "express": "^4.18.2",
        "express-graphql": "^0.12.0",
        "graphql": "^15.8.0",
        "openapi-to-graphql": "^2.6.3"
      }
    }
    
    
    1. Run the following:
    npm install 
    node index.js
    
    1. Point a browser to http://localhost:3001/graphql
    2. Run the following Query:
    query{
      courseLocationListResponse (courseCode:"2N22",providerCode:"B20", year:"2020"){
        jsonapi{
          version
        }
      }
    }
    

    The response we get is the following:

    {
      "errors": [
        {
          "message": "Operation GET /recruitment_cycles/{year}/providers/{provider_code}/courses/{course_code}/locations should have a content-type 'application/json' but has 'application/vnd.api+json' instead",
          "locations": [
            {
              "line": 2,
              "column": 3
            }
          ],
          "path": [
            "courseLocationListResponse"
          ]
        }
      ],
      "data": {
        "courseLocationListResponse": null
      }
    }
    

    Expected behavior I'd expect the app to understand that application/json and application/vnd.api+json are compatible, and return the correct results.

    Screenshots N/A.

    Additional context Changing the spec.json file to use ''application/vnd.api+json" instead of "application/json" causes erratic behaviour, as the API does not understand this mime type.

    The issue is likely to be resolved by loosening the if statement here to also treat ''application/vnd.api+json" in the same way: https://github.com/IBM/openapi-to-graphql/blob/master/packages/openapi-to-graphql/src/resolver_builder.ts#L809

    opened by pontusvision 0
  • Queries with array parameters doesn't work

    Queries with array parameters doesn't work

    Describe the bug Queries with query parameters that are array based doesn't work.

    It boils down to this line: https://github.com/IBM/openapi-to-graphql/blob/89515187ed664370a9bbc1cd58f843412d20741c/packages/openapi-to-graphql/src/resolver_builder.ts#L1374

    An array is also considered an object in JavaScript. The if statement needs to be flipped.

    opened by Zn4rK 1
Releases(v2.6.3)
A new GraphQL library for Python 🍓

Strawberry GraphQL Python GraphQL library based on dataclasses Installation ( Quick Start ) The quick start method provides a server and CLI to get go

Strawberry GraphQL 2.8k Jan 01, 2023
Django GraphQL To Do List Application

Django GraphQL Simple ToDo HOW TO RUN just run the following instructions: python -m venv venv pip install -r requirements.txt source venv/bin/activat

pedram shahsafi 1 Nov 13, 2021
graphw00f is Server Engine Fingerprinting utility for software security professionals looking to learn more about what technology is behind a given GraphQL endpoint.

graphw00f - GraphQL Server Fingerprinting graphw00f (inspired by wafw00f) is the GraphQL fingerprinting tool for GQL endpoints. Table of Contents How

Dolev Farhi 282 Jan 04, 2023
GraphiQL & the GraphQL LSP Reference Ecosystem for building browser & IDE tools.

Black Lives Matter 🖤 GraphQL IDE Monorepo Security Notice: All versions of graphiql 1.4.7 are vulnerable to an XSS attack in cases where the GraphQ

GraphQL 14.5k Jan 08, 2023
RPyC (Remote Python Call) - A transparent and symmetric RPC library for python

RPyC (pronounced like are-pie-see), or Remote Python Call, is a transparent library for symmetrical remote procedure calls, clustering, and distribute

1.3k Jan 05, 2023
Django Project with Rest and Graphql API's

Django-Rest-and-Graphql # 1. Django Project Setup With virtual environment: mkdir {project_name}. To install virtual Environment sudo apt-get install

Shubham Agrawal 5 Nov 22, 2022
ReplAPI.it A Simple and Complete Replit API Package

Notice: Currently this project is just a framework. It does not work yet. If you want to get updated when 1.0.0 is released, then click Watch - Custo

The ReplAPI.it Project 10 Jun 05, 2022
Fastapi strawberry graphql

fastapi-strawberry-graphql Quick and dirty 🍓 python python --version Python 3.10 pip pip install sqlalchemy pip install sqlmodel pip install fastapi

Rodrigo Ney 7 Oct 19, 2022
tartiflette-aiohttp is a wrapper of aiohttp which includes the Tartiflette GraphQL Engine, do not hesitate to take a look of the Tartiflette project.

tartiflette-aiohttp is a wrapper of aiohttp which includes the Tartiflette GraphQL Engine. You can take a look at the Tartiflette API documentation. U

tartiflette 60 Nov 08, 2022
Tyk Open Source API Gateway written in Go, supporting REST, GraphQL, TCP and gRPC protocols

Tyk API Gateway Tyk is an open source Enterprise API Gateway, supporting REST, GraphQL, TCP and gRPC protocols. Tyk Gateway is provided ‘Batteries-inc

Tyk Technologies 8k Jan 09, 2023
GraphQL security auditing script with a focus on performing batch GraphQL queries and mutations

BatchQL BatchQL is a GraphQL security auditing script with a focus on performing batch GraphQL queries and mutations. This script is not complex, and

Assetnote 267 Dec 24, 2022
Lavrigon - A Python Webservice to check the status of any given local service via a REST call

lavrigon A Python Webservice to check the status of any given local service via

3 Jan 02, 2022
Translate APIs described by OpenAPI Specifications (OAS) into GraphQL

OpenAPI-to-GraphQL Translate APIs described by OpenAPI Specifications (OAS) or Swagger into GraphQL. Getting started OpenAPI-to-GraphQL can be used in

International Business Machines 1.4k Dec 29, 2022
Gerenciar a velocidade da internet banda larga

Monitoramento da Velocidade da internet 📶 Status do Projeto: ✔️ (pronto) Tópicos ✍️ Descrição do projeto Funcionalidades Deploy da Aplicação Pré-requ

Bárbara Guerbas de Figueiredo 147 Nov 02, 2022
A plug and play GraphQL API for Wagtail, powered by Strawberry 🍓

Strawberry Wagtail 🐦 A plug and play GraphQL API for Wagtail, powered by Strawberry 🍓 ⚠️ Strawberry wagtail is currently experimental, please report

Patrick Arminio 27 Nov 27, 2022
ASGI support for the Tartiflette GraphQL engine

tartiflette-asgi is a wrapper that provides ASGI support for the Tartiflette Python GraphQL engine. It is ideal for serving a GraphQL API over HTTP, o

tartiflette 99 Dec 27, 2022
tartiflette-aiohttp is a wrapper of aiohttp which includes the Tartiflette GraphQL Engine, do not hesitate to take a look of the Tartiflette project.

tartiflette-aiohttp is a wrapper of aiohttp which includes the Tartiflette GraphQL Engine. You can take a look at the Tartiflette API documentation. U

tartiflette 60 Nov 08, 2022
Pygitstats - a package that allows you to use the GitHub GraphQL API with ease in your Python programs

Pygitstats - a package that allows you to use the GitHub GraphQL API with ease in your Python programs

Dillon Barnes 4 Mar 29, 2022
Integrate GraphQL with your Pydantic models

graphene-pydantic A Pydantic integration for Graphene. Installation pip install "graphene-pydantic" Examples Here is a simple Pydantic model: import u

GraphQL Python 179 Jan 02, 2023
Enable idempotent operations in POST and PATCH endpoints

Idempotency Header ASGI Middleware A middleware for making POST and PATCH endpoints idempotent. The purpose of the middleware is to guarantee that exe

Sondre Lillebø Gundersen 12 Dec 28, 2022