Git Product home page Git Product logo

galapagos's Introduction

galapagos

An implementation of the GraphQL specification in Clojure.

Build Status

Overview

The goal of this library is to expose the data of your Clojure application in a way that enables GraphQL clients to interact with it. Special care is taken to make data access as efficient as possible - streamlined, concurrent data fetching is provided by the muse library.

See links for more information on GraphQL and the ideas behind it.

Status

Galapagos is still very much pre-alpha software and nearly everything is subject to change. The first iteration suffers from two problems:

  • The schema is defined using a rather complicated, macro-based DSL. There's a lot of metadata being attached to the symbols that make up the various type definitions, which makes schema introspection overly complex. It would be better to just use straight-up Clojure data structures.
  • Data fetching has to happen using core.async. This is a design choice that a library like this should not make.

Queries

Directives and query variables are missing. Validation is lacking. Support for muse's query batching (a solution to the [1+N query problem] 1) is not yet implemented.

Mutation

Mutation operations are not currently supported.

License

Distributed under the MIT License - see LICENSE for the full license.

galapagos's People

Contributors

jstaffans avatar

Stargazers

Juan A. Ruz avatar Daniel Lee avatar Ripley Flammer avatar kazuhiro hara avatar matt knox avatar Piotr Jagielski avatar Chris Zheng avatar Elpizo Choi avatar Zachary Taylor avatar Roman Pearah avatar Bowen Li avatar Matt Revelle avatar Tienson Qin avatar Tom Vaughan avatar Jeremy Heiler avatar Nick DeCoursin avatar Xiyang Chen avatar swlkr avatar Dave Bryand avatar  avatar Mãtt Freèman avatar Fredrik Wallberg avatar

Watchers

James Cloos avatar Mãtt Freèman avatar

Forkers

rukor zachncst

galapagos's Issues

Support automatical JOINs

Basically each SolvableNode knows which its child fields are and can infer JOIN relations (assuming that the datastore is a relational database):

post(id: 1) {
  author {
    name
  }
} 

This might not be doable in a completely automatic fashion, but we can at least improve the support for this case by providing some kind of solution context that is accessible by solve functions.

Better field and argument definition DSL

E.g. like boot's task options. Closer to prismatic/schema's DSL.

{:args [:id GraphQLInt !
        :other-arg GraphQLString]}

{:fields [:id   GraphQLInt    "Some description"
          :name GraphQLString]}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.