Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/graphql-perl/graphql-plugin-convert-openapi
Plugin to convert OpenAPI schema to GraphQL schema
https://github.com/graphql-perl/graphql-plugin-convert-openapi
Last synced: 6 days ago
JSON representation
Plugin to convert OpenAPI schema to GraphQL schema
- Host: GitHub
- URL: https://github.com/graphql-perl/graphql-plugin-convert-openapi
- Owner: graphql-perl
- Created: 2017-11-17T18:45:21.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2021-09-23T13:35:39.000Z (about 3 years ago)
- Last Synced: 2023-08-20T23:00:27.416Z (about 1 year ago)
- Language: Perl
- Homepage: https://metacpan.org/release/GraphQL-Plugin-Convert-OpenAPI
- Size: 226 KB
- Stars: 5
- Watchers: 2
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: Changes
Awesome Lists containing this project
README
# NAME
GraphQL::Plugin::Convert::OpenAPI - convert OpenAPI schema to GraphQL schema
# PROJECT STATUS
| OS | Build status |
|:-------:|--------------:|
| Linux | [![Build Status](https://travis-ci.org/graphql-perl/GraphQL-Plugin-Convert-OpenAPI.svg?branch=master)](https://travis-ci.org/graphql-perl/GraphQL-Plugin-Convert-OpenAPI) |[![CPAN version](https://badge.fury.io/pl/GraphQL-Plugin-Convert-OpenAPI.svg)](https://metacpan.org/pod/GraphQL::Plugin::Convert::OpenAPI) [![Coverage Status](https://coveralls.io/repos/github/graphql-perl/GraphQL-Plugin-Convert-OpenAPI/badge.svg?branch=master)](https://coveralls.io/github/graphql-perl/GraphQL-Plugin-Convert-OpenAPI?branch=master)
# SYNOPSIS
use GraphQL::Plugin::Convert::OpenAPI;
my $converted = GraphQL::Plugin::Convert::OpenAPI->to_graphql(
'file-containing-spec.json',
);
print $converted->{schema}->to_doc;# DESCRIPTION
This module implements the [GraphQL::Plugin::Convert](https://metacpan.org/pod/GraphQL%3A%3APlugin%3A%3AConvert) API to convert
a [JSON::Validator](https://metacpan.org/pod/JSON%3A%3AValidator) specification to [GraphQL::Schema](https://metacpan.org/pod/GraphQL%3A%3ASchema) etc.It uses, from the given API spec:
- the given "definitions" as output types
- the given "definitions" as input types when required for an
input parameter
- the given operations as fields of either `Query` if a `GET`,
or `Mutation` otherwiseIf an output type has `additionalProperties` (effectively a hash whose
values are of a specified type), this poses a problem for GraphQL which
does not have such a concept. It will be treated as being made up of a
list of pairs of objects (i.e. hashes) with two keys: `key` and `value`.The queries will be run against the spec's server. If the spec starts
with a `/`, and a [Mojolicious](https://metacpan.org/pod/Mojolicious) app is supplied (see below), that
server will instead be the given app.# ARGUMENTS
To the `to_graphql` method: a URL to a specification, or a filename
containing a JSON specification, or a data structure, of an OpenAPI v2.Optionally, a [Mojolicious](https://metacpan.org/pod/Mojolicious) app can be given as the second argument. In
this case, with a [Mojolicious::Lite](https://metacpan.org/pod/Mojolicious%3A%3ALite) app, do:my $api = plugin OpenAPI => {spec => 'data://main/api.yaml'};
plugin(GraphQL => {convert => [ 'OpenAPI', $api->validator->bundle, app ]});with the usual mapping in the case of a full app. For this to work you
need [Mojolicious::Plugin::OpenAPI](https://metacpan.org/pod/Mojolicious%3A%3APlugin%3A%3AOpenAPI) version 1.25+, which returns itself
on `register`.# PACKAGE FUNCTIONS
## make\_field\_resolver
This is available as `\&GraphQL::Plugin::Convert::OpenAPI::make_field_resolver`
in case it is wanted for use outside of the "bundle" of the `to_graphql`
method. It takes arguments:- a hash-ref mapping from a GraphQL type-name to another hash-ref with
information about that type. There are addition pseudo-types with stored
information, named eg `TypeName.fieldName`, for the obvious
purpose. The use of `.` avoids clashing with real types. This will only
have information about input types.Valid keys:
- is\_hashpair
True value if that type needs transforming from a hash into pairs.
- field2operationId
Hash-ref mapping from a GraphQL operation field-name (which will
only be done on the `Query` or `Mutation` types, for obvious reasons)
to an `operationId`.- field2type
Hash-ref mapping from a GraphQL type's field-name to hash-ref mapping
its arguments, if any, to the corresponding GraphQL type-name.- field2prop
Hash-ref mapping from a GraphQL type's field-name to the corresponding
OpenAPI property-name.- is\_enum
Boolean value indicating whether the type is a [GraphQL::Type::Enum](https://metacpan.org/pod/GraphQL%3A%3AType%3A%3AEnum).
and returns a closure that can be used as a field resolver.
# DEBUGGING
To debug, set environment variable `GRAPHQL_DEBUG` to a true value.
# AUTHOR
Ed J, ``
Parts based on [https://github.com/yarax/swagger-to-graphql](https://github.com/yarax/swagger-to-graphql)
# LICENSE
Copyright (C) Ed J
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.