{"id":13499540,"url":"https://github.com/tendant/graphql-clj","last_synced_at":"2025-04-04T10:06:26.949Z","repository":{"id":54350810,"uuid":"64243348","full_name":"tendant/graphql-clj","owner":"tendant","description":"A Clojure library that provides GraphQL implementation.","archived":false,"fork":false,"pushed_at":"2020-12-19T06:57:52.000Z","size":914,"stargazers_count":285,"open_issues_count":11,"forks_count":22,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-03-28T09:05:50.683Z","etag":null,"topics":["clj","clojure","clojure-library","graphql","graphql-server"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tendant.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-07-26T18:03:42.000Z","updated_at":"2024-09-04T22:11:42.000Z","dependencies_parsed_at":"2022-08-13T13:00:41.591Z","dependency_job_id":null,"html_url":"https://github.com/tendant/graphql-clj","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tendant%2Fgraphql-clj","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tendant%2Fgraphql-clj/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tendant%2Fgraphql-clj/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tendant%2Fgraphql-clj/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tendant","download_url":"https://codeload.github.com/tendant/graphql-clj/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247157046,"owners_count":20893202,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clj","clojure","clojure-library","graphql","graphql-server"],"created_at":"2024-07-31T22:00:34.531Z","updated_at":"2025-04-04T10:06:26.932Z","avatar_url":"https://github.com/tendant.png","language":"Clojure","funding_links":[],"categories":["Libraries","Clojure","Implementations"],"sub_categories":["Clojure Libraries","Clojure"],"readme":"# graphql-clj\n\nA Clojure library designed to provide GraphQL implementation.\n\n[![Build Status](https://travis-ci.org/tendant/graphql-clj.svg?branch=master)](https://travis-ci.org/tendant/graphql-clj)\n\n## Demo\n\n[Demo Project with GraphiQL](https://github.com/tendant/graphql-clj-starter)\n\n## What's new in version 0.2\n\n1. Simplified APIs\n2. Rewrite schema and query validator for simplicity and robostness.\n3. Separate parser and validator for schema and query.\n4. High performance java parser\n\n## Installation\n\nAdd the following dependency to your project.clj file:\n\n    [graphql-clj \"0.2.9\"]\n\n## Usage\n\n### Define schema\n\n```clojure\n\n(def schema-str \"type User {\n    name: String\n    age: Int\n  }\n  type QueryRoot {\n    user: User\n  }\n\n  schema {\n    query: QueryRoot\n  }\")\n\n```\n\n### Define resolver functions\n\n```clojure\n(defn resolver-fn [type-name field-name]\n  (get-in {\"QueryRoot\" {\"user\" (fn [context parent args]\n                                 {:name \"test user name\"\n                                  :age 30})}}\n          [type-name field-name]))\n```\n### Execute query\n```clojure\n    (require '[graphql-clj.executor :as executor])\n    (def query-str \"query {user {name age}}\")\n\n    (executor/execute nil schema-str resolver-fn query-str)\n    ;; =\u003e {:data {\"user\" {\"name\" \"test user name\", \"age\" 30}}}\n\n```\n\n### Caching validated schema and query for performance\n```clojure\n    (require '[graphql-clj.schema-validator :as schema-validator])\n    (require '[graphql-clj.query-validator :as query-validator])\n    \n    ;; Consider memoizing the result of parsing and validating the query before execution\n    (def validated-schema (schema-validator/validate-schema schema-str)) ; throw ex-info with ex-data {:errors errors}\n    (def validated-query (query-validator/validate-query validated-schema query-str)) ; return [errors validated-ast]\n\n    (executor/execute nil validated-schema resolver-fn validated-query)\n    ;; =\u003e {:data {\"user\" {\"name\" \"test user name\", \"age\" 30}}}\n```\n\n### Migrating from 0.1.x to 0.2 version\n\n1. Separated parser api for schema and query\n```\n   parser/parse-schema for schema parsing\n   parser/parse-query-document for query parsing\n```\n2. Simplified validator api, it can take query string and schema string now.\n```\n   graphql-clj.schema-validator/validate-schema replaces validator/validate-schema\n   graphql-clj.query-validator/validate-query replaces validator/validate-statement\n```\n3. executor/execute function can take string and validated result for both schema and query string.\n\n## Deploy to local for development\n\n    $ lein install\n\n## Release to Clojars\n\n    $ lein deploy clojars\n\n## Test\n\n    $ lein test\n\n## License\n\nCopyright © 2016 Lei Wang\n\nDistributed under the Eclipse Public License either version 1.0 or (at\nyour option) any later version.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftendant%2Fgraphql-clj","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftendant%2Fgraphql-clj","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftendant%2Fgraphql-clj/lists"}