README.md

vetka-gateway

A simple Spring Boot-based GraphQL router.

  • Has modularized architecture.
  • Has its own GraphQL API for management purposes.

Modules

  • vetka-gateway-core - base gateway logic.
  • vetka-gateway-persistence-mongo - implementation of the persistence layer that uses MongoDB as a storage engine.
  • vetka-gateway-persistence-inmemory - implementation of the persistence layer that simply stores the configuration in the memory.
  • vetka-gateway-transport-httpclient - implementation of the transport layer that uses Java HttpClient.
  • vetka-gateway-slow-query-log - basic monitoring of GraphQL requests with a working time longer than a specified threshold.
  • vetka-gateway-slow-query-log-persistence-mongo - stores slow query log to MongoDB.
  • vetka-gateway-demo - application demonstrating the packaging of the Vetka Gateway libraries in a single executable application.
  • vetka-gateway-test-utils - internal usage classes.

Usage

  • Create your own Spring Boot application. You can use vetka-gateway-demo as a working example.
  • Add vetka-gateway-core library as a dependency.
  • Add other vetka-gateway-* libraries you need or your own versions.

Configuration

By default Vetka Gateway listens to management requests on /graphql address.

Add GraphQL endpoint (underlying service)

mutation {
    createGraphQlEndpoint(
        input: {
            name: "my-api",
            address: "https://my-api.io/graphql",
            schema: "type Country {\n  code: ID!\n  name: String!\n}\n\ninput StringQueryOperatorInput {\n  eq: String\n  ne: String\n  in: [String]\n  nin: [String]\n  regex: String\n  glob: String\n}\n\ninput CountryFilterInput {\n  code: StringQueryOperatorInput\n  currency: StringQueryOperatorInput\n  continent: StringQueryOperatorInput\n}\n\ntype Query {\n  countries(filter: CountryFilterInput): [Country!]!\n}\n"
            httpVersion: "1.1"
            connectTimeout: 30
            readTimeout: 500
        }
    ) {
        ...on GraphQlEndpointCreationPayload {
            graphQlEndpoint {
                id
                name
                address
                schema
            }
        }
        ...on GraphQlEndpointCreationErrors {
            errors {
                ...on EndpointErrorEmptyName {
                    __typename
                    message
                }
                ...on EndpointErrorDuplicatingName {
                    __typename
                    message
                    name
                }
                ...on GraphQlEndpointErrorBadSchema {
                    __typename
                    message
                    errors {
                        message
                        locations {
                            line
                            column
                        }
                    }
                }
                ...on IError {
                    __typename
                    message
                }
            }
        }
    }
}

Edit GraphQL endpoint

mutation {
    updateGraphQlEndpoint(
        input: {
            id: "63eb7eea6cd73c172052175e"
            name: "my-api",
            address: "https://my-api.io/graphql",
            schema: "type Country {\n  code: ID!\n  name: String!\n}\n\ninput StringQueryOperatorInput {\n  eq: String\n  ne: String\n  in: [String]\n  nin: [String]\n  regex: String\n  glob: String\n}\n\ninput CountryFilterInput {\n  code: StringQueryOperatorInput\n  currency: StringQueryOperatorInput\n  continent: StringQueryOperatorInput\n}\n\ntype Query {\n  countries(filter: CountryFilterInput): [Country!]!\n}\n"
            httpVersion: "2"
            connectTimeout: 20
            readTimeout: 300
        }
    ) {
        ...on GraphQlEndpointUpdatePayload {
            graphQlEndpoint {
                id
                name
                address
                schema
            }
        }
        ...on GraphQlEndpointCreationErrors {
            errors {
                ...on EndpointErrorUnknownId {
                    __typename
                    message
                    id
                }
                ...on EndpointErrorEmptyName {
                    __typename
                    message
                }
                ...on EndpointErrorDuplicatingName {
                    __typename
                    message
                    name
                }
                ...on GraphQlEndpointErrorBadSchema {
                    __typename
                    message
                    errors {
                        message
                        locations {
                            line
                            column
                        }
                    }
                }
                ...on IError {
                    __typename
                    message
                }
            }
        }
    }
}

Delete GraphQL endpoint

mutation {
    deleteEndpoint(
        id: "63eb7eea6cd73c172052175e"
    ) {
        ...on EndpointDeletionPayload {
            id
        }
        ...on EndpointDeletionErrors {
            errors {
                ...on EndpointErrorUnknownId {
                    __typename
                    message
                    id
                }
                ...on IError {
                    __typename
                    message
                }
            }
        }
    }
}
Конвейеры
0 успешных
0 с ошибкой