|
1 | | -# graphqlize-java |
| 1 | +[GraphQLize](https://www.graphqlize.org), an open-source Java(JVM) library for developing GraphQL API instantly from your existing PostgreSQL and MySQL databases. |
2 | 2 |
|
3 | | -A Clojure library designed to ... well, that part is up to you. |
| 3 | +It aims to simplify the effort required to expose GraphQL APIs over relational databases. |
4 | 4 |
|
5 | | -## Usage |
| 5 | +> GraphQLize is at its early stages now. The objective of this early release is to get early feedback from the community. **It is not production-ready yet!** |
6 | 6 |
|
7 | | -FIXME |
| 7 | +[] |
8 | 8 |
|
9 | | -## License |
| 9 | +<a href="https://discord.gg/akkdPqf"><img src="https://img.shields.io/badge/chat-discord-brightgreen.svg?logo=discord&style=flat"></a> |
| 10 | +<a href="https://twitter.com/intent/follow?screen_name=GraphQLize"><img src="https://img.shields.io/badge/Follow-GraphQLize-blue.svg?style=flat&logo=twitter"></a> |
| 11 | + |
| 12 | +## Rationale |
| 13 | + |
| 14 | +In the JVM ecosystem, developing GraphQL APIs to expose the data from the relational databases requires a lot of manual work. Right from defining the GraphQL schemas (either code-first or schema-first) to wiring them with resolvers and the database access logic, we spend a significant amount of our development time. |
| 15 | + |
| 16 | +In addition to this, we also need to take care of optimizing the underlying SQL queries to avoid problems like N+1 queries. We have to account the maintenance of the resulting codebase as well! |
| 17 | + |
| 18 | +GraphQLize will help you to overcome all these shortcomings. It provides you with an efficient GraphQL implementation in just few lines of code. |
| 19 | + |
| 20 | +## What is GraphQLize? |
| 21 | + |
| 22 | +GraphQLize is a JVM library written in Clojure with Java interoperability. The crux of GraphQLize is generating the GraphQL schema and resolving the queries by making use of [JDBC metadata](https://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html) provided by the JDBC drivers. |
| 23 | + |
| 24 | +It currently supports Postgres (9.4 & above) and MySQL (8.0 & above). |
| 25 | + |
| 26 | +## Getting Started |
| 27 | + |
| 28 | +Getting started with GraphQLize is simple and involves only a few steps. |
| 29 | + |
| 30 | +1. Add the GraphQLize dependency in your project. |
| 31 | +2. Initialize GraphQLize Resolver by providing the Java SQL [data source](https://docs.oracle.com/javase/7/docs/api/javax/sql/DataSource.html). |
| 32 | +3. Add a GraphQL API endpoint and use the initialized GraphQlize Resolver in the previous step. |
| 33 | + |
| 34 | +The actual implementation of these steps will vary based on which framework (Spring Boot, Spark Java, etc.). Please refer the below links for more details. |
| 35 | + |
| 36 | +- [Spring Boot](http://graphqlize.org/docs/getting_started/java/springboot) |
| 37 | +- [Spark Java](http://graphqlize.org/docs/getting_started/java/sparkjava) |
| 38 | +- [Vanilla Java](https://www.graphqlize.org/docs/getting_started/java/vanilla) |
| 39 | + |
| 40 | +## Is It Production Ready? |
| 41 | + |
| 42 | +It will be in a few months. |
10 | 43 |
|
11 | | -Copyright © 2020 FIXME |
| 44 | +The objective of this alpha release is to get early feedback from the community. |
12 | 45 |
|
13 | | -This program and the accompanying materials are made available under the |
14 | | -terms of the Eclipse Public License 2.0 which is available at |
15 | | -http://www.eclipse.org/legal/epl-2.0. |
| 46 | +There are close to [forty issues](https://github.com/graphqlize/graphqlize/issues?q=is%3Aissue+is%3Aopen+sort%3Acreated-asc) that I am planning to work on in the upcoming months to make it production ready. |
| 47 | + |
| 48 | +You can keep track of the progress by |
| 49 | + |
| 50 | +- Following the [GitHub project board](https://github.com/orgs/graphqlize/projects/1) |
| 51 | +- Subscribing to [GraphQLize's newsletter](). |
| 52 | +- Joining [GraphQLize's Discord](https://discord.gg/akkdPqf). |
| 53 | + |
| 54 | +## How can I contribute? |
| 55 | + |
| 56 | +GraphQLize is at its early stage now, and the codebase and the APIs are not stable yet. |
| 57 | + |
| 58 | +So, at this instant, the best way to contribute is to initiate a chat in [GraphQLize's Discord](https://discord.gg/akkdPqf) channel or raise [a GitHub issue](https://github.com/graphqlize/graphqlize/issues/new) with all the relevant details, and we'll take it from there. |
| 59 | + |
| 60 | +## Oracle & SQL Server Support |
| 61 | + |
| 62 | +One of the design goal of GraphQLize from day one is to support Postgres, MySQL, Oracle & MS SQL Server. To start with, I am focussing on getting it to a production ready state for Postgres & MySQL. After accomplishing this, I will be focusing on the other two. |
| 63 | + |
| 64 | +## Acknowledgements |
| 65 | + |
| 66 | +[PostgREST](http://postgrest.org), [PostGraphile](https://www.graphile.org/postgraphile/), [KeyStoneJs](https://www.keystonejs.com/) and [Hasura](https://hasura.io/) are the inspiration behind GraphQLize. |
| 67 | + |
| 68 | +GraphQLize is not possible without the following excellent Clojure libraries. |
| 69 | + |
| 70 | +- [HoneySQL](https://github.com/jkk/honeysql) |
| 71 | +- [Lacinia](https://github.com/walmartlabs/lacinia) |
| 72 | +- [next-jdbc](https://github.com/seancorfield/next-jdbc) |
| 73 | +- [inflections](https://github.com/r0man/inflections-clj) |
| 74 | +- [data-json](https://github.com/clojure/data.json) |
| 75 | + |
| 76 | +The samples in the documentation of GraphQLize uses the [Sakila](https://www.jooq.org/sakila) database from [JOOQ](https://www.jooq.org) extensively. |
| 77 | + |
| 78 | +## License |
16 | 79 |
|
17 | | -This Source Code may also be made available under the following Secondary |
18 | | -Licenses when the conditions for such availability set forth in the Eclipse |
19 | | -Public License, v. 2.0 are satisfied: GNU General Public License as published by |
20 | | -the Free Software Foundation, either version 2 of the License, or (at your |
21 | | -option) any later version, with the GNU Classpath Exception which is available |
22 | | -at https://www.gnu.org/software/classpath/license.html. |
| 80 | +The use and distribution terms for this software are covered by the [Eclipse Public License - v 2.0](https://www.eclipse.org/legal/epl-2.0). By using this software in any fashion, you are agreeing to be bound by the terms of this license. |
0 commit comments