From b26e0234831f532f5998964a1dc28729b9ff5130 Mon Sep 17 00:00:00 2001 From: sezgi Date: Tue, 7 Jul 2020 14:47:42 -0700 Subject: [PATCH] docs: docs for remote joins (close #4911) (#5132) --- CHANGELOG.md | 1 + .../remote-schemas/auth0-wrapper/.gitignore | 1 + .../remote-schemas/auth0-wrapper/README.md | 65 ++++++ .../remote-schemas/auth0-wrapper/index.js | 94 ++++++++ .../remote-schemas/auth0-wrapper/package.json | 15 ++ docs/graphql/manual/actions/types/index.rst | 2 +- .../auth/authorization/permission-rules.rst | 2 +- docs/graphql/manual/getting-started/index.rst | 2 +- docs/graphql/manual/index.rst | 6 +- .../manual/queries/nested-object-queries.rst | 2 +- .../manual/remote-schemas/adding-schema.rst | 124 ++++++++++ docs/graphql/manual/remote-schemas/index.rst | 215 ++---------------- .../manual/remote-schemas/schema-auth.rst | 108 +++++++++ .../graphql/manual/schema/computed-fields.rst | 2 +- docs/graphql/manual/schema/index.rst | 3 +- .../action-relationships.rst | 203 +++++++++++++++++ .../schema/remote-relationships/index.rst | 50 ++++ .../remote-schema-relationships.rst | 168 ++++++++++++++ .../create.rst | 3 + .../database-modelling/index.rst | 0 .../database-modelling/many-to-many.rst | 15 +- .../database-modelling/one-to-many.rst | 15 +- .../database-modelling/one-to-one.rst | 15 +- .../index.rst | 7 +- .../rename.rst | 0 .../manual/schema/using-existing-database.rst | 2 +- .../manual/security-disclosure/index.rst | 2 +- .../manual/subscriptions/use-cases.rst | 2 +- .../manual/remote-joins/action-rel.png | Bin 0 -> 15722 bytes docs/img/graphql/manual/remote-joins/add.png | Bin 0 -> 31403 bytes .../manual/remote-joins/define-action-rel.png | Bin 0 -> 23675 bytes .../graphql/manual/remote-joins/define.png | Bin 0 -> 151008 bytes docs/index.rst | 2 +- 33 files changed, 891 insertions(+), 235 deletions(-) create mode 100644 community/boilerplates/remote-schemas/auth0-wrapper/.gitignore create mode 100644 community/boilerplates/remote-schemas/auth0-wrapper/README.md create mode 100644 community/boilerplates/remote-schemas/auth0-wrapper/index.js create mode 100644 community/boilerplates/remote-schemas/auth0-wrapper/package.json create mode 100644 docs/graphql/manual/remote-schemas/adding-schema.rst create mode 100644 docs/graphql/manual/remote-schemas/schema-auth.rst create mode 100644 docs/graphql/manual/schema/remote-relationships/action-relationships.rst create mode 100644 docs/graphql/manual/schema/remote-relationships/index.rst create mode 100644 docs/graphql/manual/schema/remote-relationships/remote-schema-relationships.rst rename docs/graphql/manual/schema/{relationships => table-relationships}/create.rst (99%) rename docs/graphql/manual/schema/{relationships => table-relationships}/database-modelling/index.rst (100%) rename docs/graphql/manual/schema/{relationships => table-relationships}/database-modelling/many-to-many.rst (97%) rename docs/graphql/manual/schema/{relationships => table-relationships}/database-modelling/one-to-many.rst (92%) rename docs/graphql/manual/schema/{relationships => table-relationships}/database-modelling/one-to-one.rst (93%) rename docs/graphql/manual/schema/{relationships => table-relationships}/index.rst (99%) rename docs/graphql/manual/schema/{relationships => table-relationships}/rename.rst (100%) create mode 100644 docs/img/graphql/manual/remote-joins/action-rel.png create mode 100644 docs/img/graphql/manual/remote-joins/add.png create mode 100644 docs/img/graphql/manual/remote-joins/define-action-rel.png create mode 100644 docs/img/graphql/manual/remote-joins/define.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 979df6eeb61..9a0df4a69d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ - console: add the ability to delete a role in permissions summary page (close #3353) (#4987) - console: fix styling of table row contents on tables on relationship page (#4974) - cli: handle missing files during metadata apply (close #5163) (#5170) +- docs: add pages on remote joins (close #4911) (#5132) - docs: add page on scheduled triggers (close #4913) (#5141) - docs: add page on Relay schema (close #4912) (#5150) diff --git a/community/boilerplates/remote-schemas/auth0-wrapper/.gitignore b/community/boilerplates/remote-schemas/auth0-wrapper/.gitignore new file mode 100644 index 00000000000..b512c09d476 --- /dev/null +++ b/community/boilerplates/remote-schemas/auth0-wrapper/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/community/boilerplates/remote-schemas/auth0-wrapper/README.md b/community/boilerplates/remote-schemas/auth0-wrapper/README.md new file mode 100644 index 00000000000..e2a1dedcb25 --- /dev/null +++ b/community/boilerplates/remote-schemas/auth0-wrapper/README.md @@ -0,0 +1,65 @@ +# Auth0 wrapper - Boilerplate to write a GraphQL server that wraps Auth0's REST API + +This boilerplate gives an example of writing a GraphQL service to wrap [Auth0](http://auth0.com/)'s REST API. +You can add this Auth0 wrapper as a remote schema in Hasura. + +## Stack + +Node 14.4 + +Apollo Server (GraphQL framework) + +## REST API + +GET: `https://[YOUR AUTH0 ROOT].auth0.com/api/v2/users/{id}` + +GET: `https://[YOUR AUTH0 ROOT].auth0.com/api/v2/users` + +You can get a token via [Auth0's Management API](https://auth0.com/docs/api/management/v2). + +## GraphQL API + +We convert the above REST API into the following GraphQL API: + +``` + type Query { + auth0 (auth0_id: String, email: String): Auth0Info + } + + type Auth0Info { + user_id: String, + email: String, + email_verified: Boolean, + name: String, + picture: String, + nickname: String, + created_at: String, + last_login: String, + logins_count: Int + } +``` + +## Deployment (Using Heroku) + +You need a Heroku account and `heroku-cli` installed. Execute the following commands in a terminal: + +1. Log into Heroku + +```bash +heroku login +``` + +2. Create GRAPHQL API app + +```bash +# in current directory (community/boilerplates/remote-schemas/auth0-wrapper) +heroku create +``` + +3. Deploy GRAPHQL API app + +```bash +git push heroku master +``` + +The final step will also return a HTTPS URL in the output. Now, you can go to Hasura console and add this URL as a remote schema to allow querying it via Hasura. diff --git a/community/boilerplates/remote-schemas/auth0-wrapper/index.js b/community/boilerplates/remote-schemas/auth0-wrapper/index.js new file mode 100644 index 00000000000..3063f4b5400 --- /dev/null +++ b/community/boilerplates/remote-schemas/auth0-wrapper/index.js @@ -0,0 +1,94 @@ +const fetch = require('node-fetch'); +const { ApolloServer, ApolloError } = require('apollo-server'); +const { makeExecutableSchema } = require('graphql-tools'); + +const ADMIN_TOKEN = process.env.AUTH0_ADMIN_TOKEN; +const ENDPOINT = process.env.AUTH0_ENDPOINT + +const OPTIONS = { + method: 'GET', + headers: { + "Authorization": `Bearer ${ADMIN_TOKEN}` + } +}; + +const getUserFromAuth0 = async (auth0_id) => { + if (!ADMIN_TOKEN) { + throw new ApolloError("no admin token provided"); + } + + const response = await fetch( + `${ENDPOINT}/${auth0_id}`, + OPTIONS + ); + + try { + const respObj = await response.json(); + return respObj; + } catch (e) { + throw new ApolloError(e); + } +} + +const getUserFromAuth0Email = async (email) => { + if (!ADMIN_TOKEN) { + throw new ApolloError("no admin token provided"); + } + + const response = await fetch( + ENDPOINT, + OPTIONS + ); + + try { + const respObj = await response.json(); + return respObj.find(u => u.email === email); + } catch (e) { + throw new ApolloError(e); + } +} + +const typeDefs = ` + type Query { + auth0 (auth0_id: String, email: String): Auth0Info + } + + type Auth0Info { + user_id: String, + email: String, + email_verified: Boolean, + name: String, + picture: String, + nickname: String, + created_at: String, + last_login: String, + logins_count: Int + } +`; + +const resolvers = { + Query: { + auth0: async (_, args) => { + let response; + try { + if (args.auth0_id) { + response = await getUserFromAuth0(args.auth0_id); + + } else { + response = await getUserFromAuth0Email(args.email); + } + return response; + } catch (e) { + throw e; + } + } + } +} + +const schema = makeExecutableSchema({ typeDefs, resolvers }); + +const server = new ApolloServer({ schema, introspection: true, playground: true }); + +server.listen(process.env.PORT || 3000).then(({ url }) => { + console.log('Listening at ' + url); +}); diff --git a/community/boilerplates/remote-schemas/auth0-wrapper/package.json b/community/boilerplates/remote-schemas/auth0-wrapper/package.json new file mode 100644 index 00000000000..19019dae214 --- /dev/null +++ b/community/boilerplates/remote-schemas/auth0-wrapper/package.json @@ -0,0 +1,15 @@ +{ + "name": "auth0-graphql", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "scripts": { + "start": "node index.js" + }, + "dependencies": { + "apollo-server": "^2.9.0", + "graphql": "^14.5.3", + "graphql-tools": "^4.0.5", + "node-fetch": "^2.6.0" + } +} \ No newline at end of file diff --git a/docs/graphql/manual/actions/types/index.rst b/docs/graphql/manual/actions/types/index.rst index b220689e08c..f54a19f584f 100644 --- a/docs/graphql/manual/actions/types/index.rst +++ b/docs/graphql/manual/actions/types/index.rst @@ -59,7 +59,7 @@ Relationships ************* Custom object types can be connected to the rest of the graph by setting up -:ref:`relationships ` with tables/views. +:ref:`table relationships ` with tables/views. **For example**, given the object type: diff --git a/docs/graphql/manual/auth/authorization/permission-rules.rst b/docs/graphql/manual/auth/authorization/permission-rules.rst index 94e1c8676a9..22c35d9c801 100644 --- a/docs/graphql/manual/auth/authorization/permission-rules.rst +++ b/docs/graphql/manual/auth/authorization/permission-rules.rst @@ -156,7 +156,7 @@ the author's ID*): Using relationships or nested objects ************************************* -You can leverage :ref:`relationships ` to define permission rules with fields +You can leverage :ref:`table relationships ` to define permission rules with fields from a nested object. **For example**, let's say you have an object relationship called ``agent`` from the ``authors`` table to another table diff --git a/docs/graphql/manual/getting-started/index.rst b/docs/graphql/manual/getting-started/index.rst index 6b26c02f5e3..26b7f79d3c6 100644 --- a/docs/graphql/manual/getting-started/index.rst +++ b/docs/graphql/manual/getting-started/index.rst @@ -4,7 +4,7 @@ .. _getting_started: -Getting started +Getting Started =============== .. contents:: Table of contents diff --git a/docs/graphql/manual/index.rst b/docs/graphql/manual/index.rst index cbc79f160da..5347630c539 100644 --- a/docs/graphql/manual/index.rst +++ b/docs/graphql/manual/index.rst @@ -2,9 +2,9 @@ :description: Hasura GraphQL engine documentation :keywords: hasura, docs, manual, graphql engine -.. title:: Hasura GraphQL engine Documentation +.. title:: Hasura GraphQL Engine Documentation -Hasura GraphQL engine documentation +Hasura GraphQL Engine Documentation =================================== .. contents:: Table of contents @@ -33,7 +33,7 @@ The Hasura GraphQL engine lets you set up a GraphQL server and event triggers ov Deploying hasura-cli/index API Reference - How it works + How It Works Troubleshooting guides/index security-disclosure/index diff --git a/docs/graphql/manual/queries/nested-object-queries.rst b/docs/graphql/manual/queries/nested-object-queries.rst index b049840893d..bb3bd8f7bee 100644 --- a/docs/graphql/manual/queries/nested-object-queries.rst +++ b/docs/graphql/manual/queries/nested-object-queries.rst @@ -12,7 +12,7 @@ Nested object queries :depth: 2 :local: -You can use the object (one-to-one) or array (one-to-many) :ref:`relationships ` defined +You can use the object (one-to-one) or array (one-to-many) :ref:`relationships ` defined in your schema to make a nested query i.e. fetch data for a type along with data from a nested or related type. The **name of the nested object** is the same as the name of the object/array relationship configured in diff --git a/docs/graphql/manual/remote-schemas/adding-schema.rst b/docs/graphql/manual/remote-schemas/adding-schema.rst new file mode 100644 index 00000000000..3d0e942a735 --- /dev/null +++ b/docs/graphql/manual/remote-schemas/adding-schema.rst @@ -0,0 +1,124 @@ +.. meta:: + :description: Add a remote schema with Hasura + :keywords: hasura, docs, remote schema, add + +.. _adding_schema: + +Adding a remote schema +====================== + +.. contents:: Table of contents + :backlinks: none + :depth: 1 + :local: + +Introduction +------------ + +Follow the steps below to add a remote schema to the Hasura GraphQL engine. + +Step 1: Write a custom GraphQL server +------------------------------------- + +You need to create a custom GraphQL server with a schema and corresponding resolvers that solve your use case +(*if you already have a functional GraphQL server that meets your requirements, you can skip this step*). + +You can use any language/framework of your choice to author this server and deploy it anywhere. A great way to get +started is to use one of our boilerplates: + +- `Boilerplates `__ + +.. _merge_remote_schema: + +Step 2: Merge remote schema +--------------------------- + +To merge your remote schema with the GraphQL engine's auto-generated schema: + +Head to the ``Remote Schemas`` tab of the console and click on the ``Add`` button. + +.. thumbnail:: /img/graphql/manual/business-logic/add-remote-schemas-interface.png + :alt: Merge remote schema + +You need to enter the following information: + +- **Remote Schema name**: an alias for the remote schema that must be unique on an instance of the GraphQL engine. +- **GraphQL server URL**: the endpoint at which your remote GraphQL server is available. This value can be entered + manually or by specifying an environment variable that contains this information. + + .. note:: + + During **local development** with the remote schema server on localhost, ensure that the Hasura Docker container can reach + the server endpoint on the host. A common way to do this is to use the domain ``host.docker.internal`` on Docker for Mac and Windows or the Docker bridge IP on Linux (typically ``172.17.0.1`` - the IP address of ``docker0`` interface. use ``ip addr show docker0``) instead of ``127.0.0.1``. + + Similarly, if you are adding the URL using env variable, then run the Hasura docker container with the env variable added during `docker run`. Example ``-e REMOTE_SCHEMA_ENDPOINT=http://host.docker.internal:4000/mycustomgraphql`` + +- **Headers**: configure the headers to be sent to your custom GraphQL server: + + - Toggle forwarding all headers sent by the client (when making a GraphQL query) to your remote GraphQL server. + - Send additional headers to your remote server - these can be static header name-value pairs; and/or pairs of + "header name-environment variable name". You can specify the value of the header to be picked up from the environment + variable. + + **Example**: Let's say your remote GraphQL server needs a ``X-Api-Key`` as a header. As this value contains + sensitive data (like API key in this example), you can configure the name of an environment variable which will hold + the value. This environment variable needs to be present when you start the GraphQL engine. When Hasura sends + requests to your remote server, it will pick up the value from this environment variable. + +.. admonition:: Using environment variables + + If you are using environment variables in the remote schema configuration - either + for URL or headers - **the environment variables need to be present** with valid values + when adding the remote schema i.e. the GraphQL engine should be started with these environment variables. + +Click on the ``Add Remote Schema`` button to merge the remote schema. + +Step 3: Make queries to the remote server from Hasura +----------------------------------------------------- +Now you can head to the ``GraphiQL`` tab and make queries to your remote server from Hasura. + +You can query your remote server by making requests to the Hasura GraphQL endpoint (``/v1/graphql``). + +Points to remember +------------------ + +Remote schema fields nomenclature +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Top-level field names need to be unique across all merged schemas (*case-sensitive match*). +- Types with the *exact same name and structure* will be merged. But types with the *same name but different + structure* will result in type conflicts. + + +Schema refreshing +^^^^^^^^^^^^^^^^^ + +For versions <= ``v1.0.0-beta.2``, GraphQL schema of each added remote server is refreshed every time a +metadata modifying operation like adding tables/functions, defining relationships/permissions etc. is done. + +From ``v1.0.0-beta.3`` onwards, a remote server's GraphQL schema is cached and refreshed only when user +explicitly reloads remote schema by clicking the ``Reload`` button on the console or +by making a :ref:`reload_remote_schema` metadata API request + + +Current limitations +^^^^^^^^^^^^^^^^^^^ + +- Nodes from different GraphQL servers cannot be used in the same query/mutation. All top-level fields have to be + from the same GraphQL server. +- Subscriptions on remote GraphQL servers are not supported. + +These limitations will be addressed in upcoming versions. + +Extending the auto-generated GraphQL schema fields +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +For some use cases, you may need to extend the GraphQL schema fields exposed by the Hasura GraphQL engine +(and not merely augment as we have done :ref:`here `) with a custom schema/server. To support them, you can use +community tooling to write your own client-facing GraphQL gateway that interacts with the GraphQL engine. + +.. note:: + + **Adding an additional layer on top of the Hasura GraphQL engine significantly impacts the performance provided by + it out of the box** (*by as much as 4x*). If you need any help with remodelling these kinds of use cases to use the + built-in remote schemas feature, please get in touch with us on `Discord `__. diff --git a/docs/graphql/manual/remote-schemas/index.rst b/docs/graphql/manual/remote-schemas/index.rst index bf2f4104c8f..42d87514704 100644 --- a/docs/graphql/manual/remote-schemas/index.rst +++ b/docs/graphql/manual/remote-schemas/index.rst @@ -4,14 +4,17 @@ .. _remote_schemas: -Remote schemas +Remote Schemas ============== .. contents:: Table of contents :backlinks: none - :depth: 2 + :depth: 1 :local: +Introduction +------------ + Hasura gives you CRUD + realtime GraphQL APIs with authorization & access control. However, in many cases, you will need to write APIs (queries, mutations) that contain custom logic. For example, implementing a payment API, or querying data that is not in your database. @@ -34,7 +37,6 @@ Use cases - Custom business logic, like a payment API - Querying data that is not available in your database - You can handle these use cases by writing resolvers in a custom GraphQL server and making Hasura merge this "remote schema" with the existing auto-generated schema. You can also add multiple remote schemas. Think of the merged schema as @@ -46,204 +48,15 @@ a union of top-level nodes from each of the sub-schemas. app users to the GraphQL APIs that are auto-generated via Hasura, head to :ref:`auth` -Adding a remote schema ----------------------- +Remote schema relationships +--------------------------- -Follow the steps below to add a "remote schema" to the Hasura GraphQL engine: +You can create remote relationships between your tables and tables from your remote schema. Read more about this in the :ref:`remote_schema_relationships` section. -Step 1: Write a custom GraphQL server -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +**See:** -You need to create a custom GraphQL server with a schema and corresponding resolvers that solve your use case -(*if you already have a functional GraphQL server that meets your requirements, you can skip this step*). - -You can use any language/framework of your choice to author this server and deploy it anywhere. A great way to get -started is to use one of our boilerplates: - -- `Boilerplates `__ - -.. _merge_remote_schema: - -Step 2: Merge remote schema -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -To merge your remote schema with the GraphQL engine's auto-generated schema: - -Head to the ``Remote Schemas`` tab of the console and click on the ``Add`` button. - -.. thumbnail:: /img/graphql/manual/business-logic/add-remote-schemas-interface.png - :alt: Merge remote schema - -You need to enter the following information: - -- **Remote Schema name**: an alias for the remote schema that must be unique on an instance of the GraphQL engine. -- **GraphQL server URL**: the endpoint at which your remote GraphQL server is available. This value can be entered - manually or by specifying an environment variable that contains this information. - - .. note:: - - During **local development** with the remote schema server on localhost, ensure that the Hasura Docker container can reach - the server endpoint on the host. A common way to do this is to use the domain ``host.docker.internal`` on Docker for Mac and Windows or the Docker bridge IP on Linux (typically ``172.17.0.1`` - the IP address of ``docker0`` interface. use ``ip addr show docker0``) instead of ``127.0.0.1``. - - Similarly, if you are adding the URL using env variable, then run the Hasura docker container with the env variable added during `docker run`. Example ``-e REMOTE_SCHEMA_ENDPOINT=http://host.docker.internal:4000/mycustomgraphql`` - -- **Headers**: configure the headers to be sent to your custom GraphQL server: - - - Toggle forwarding all headers sent by the client (when making a GraphQL query) to your remote GraphQL server. - - Send additional headers to your remote server - these can be static header name-value pairs; and/or pairs of - "header name-environment variable name". You can specify the value of the header to be picked up from the environment - variable. - - **Example**: Let's say your remote GraphQL server needs a ``X-Api-Key`` as a header. As this value contains - sensitive data (like API key in this example), you can configure the name of an environment variable which will hold - the value. This environment variable needs to be present when you start the GraphQL engine. When Hasura sends - requests to your remote server, it will pick up the value from this environment variable. - -.. admonition:: Using environment variables - - If you are using environment variables in the remote schema configuration - either - for URL or headers - **the environment variables need to be present** with valid values - when adding the remote schema i.e. the GraphQL engine should be started with these environment variables. - -Click on the ``Add Remote Schema`` button to merge the remote schema. - -Step 3: Make queries to the remote server from Hasura -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Now you can head to the ``GraphiQL`` tab and make queries to your remote server from Hasura. - -You can query your remote server by making requests to the Hasura GraphQL endpoint (``/v1/graphql``). - -Points to remember ------------------- - -Remote schema fields nomenclature -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -- Top-level field names need to be unique across all merged schemas (*case-sensitive match*). -- Types with the *exact same name and structure* will be merged. But types with the *same name but different - structure* will result in type conflicts. - - -Schema refreshing -^^^^^^^^^^^^^^^^^ - -For versions <= ``v1.0.0-beta.2``, GraphQL schema of each added remote server is refreshed every time a -metadata modifying operation like adding tables/functions, defining relationships/permissions etc. is done. - -From ``v1.0.0-beta.3`` onwards, a remote server's GraphQL schema is cached and refreshed only when user -explicitly reloads remote schema by clicking the ``Reload`` button on the console or -by making a :ref:`reload_remote_schema` metadata API request - - -Current limitations -^^^^^^^^^^^^^^^^^^^ - -- Nodes from different GraphQL servers cannot be used in the same query/mutation. All top-level fields have to be - from the same GraphQL server. -- Subscriptions on remote GraphQL servers are not supported. - -These limitations will be addressed in upcoming versions. - -Extending the auto-generated GraphQL schema fields -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For some use cases, you may need to extend the GraphQL schema fields exposed by the Hasura GraphQL engine -(*and not merely augment as we have done above*) with a custom schema/server. To support them, you can use -community tooling to write your own client-facing GraphQL gateway that interacts with the GraphQL engine. - -.. note:: - - **Adding an additional layer on top of the Hasura GraphQL engine significantly impacts the performance provided by - it out of the box** (*by as much as 4x*). If you need any help with remodelling these kinds of use cases to use the - built-in remote schemas feature, please get in touch with us on `Discord `__. - - -Authorization in your remote schema server ------------------------------------------- - -Hasura will forward the resolved ``x-hasura-*`` values as headers to your remote -schema. You can use this information to apply authorization rules in your -server. You don't have to redo authentication in your remote schema server. - -You can also configure Hasura to have (as shown :ref:`above `): - -1. static header values that are sent to the remote server -2. forward all headers from the client (like ``Authorization``, ``Cookie`` headers etc.) - -In case there are multiple headers with same name, the order of precedence is: -configuration headers > resolved user (``x-hasura-*``) variables > client headers. - -So for example, if the client sends an ``Authorization`` header, and the -configuration also has an ``Authorization`` header, the configuration header value -will selected. - -.. note:: - - The headers from the client behave similarly to the authorization system. If - ``x-hasura-admin-secret`` is sent, then all ``x-hasura-*`` values from the - client are respected, otherwise they are ignored. - -Cookie header from your remote GraphQL servers -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -``Set-Cookie`` headers from your remote schema servers are sent back to the -client over HTTP transport. **Over websocket transport there exists no means -of sending headers after a query/mutation and hence the ``Set-Cookie`` headers are -not sent to the client.** Use HTTP transport if your remote servers set cookies. - - -Bypassing Hasura's authorization system for remote schema requests ------------------------------------------------------------------- - -It might be necessary sometimes to bypass Hasura's authorization system (calling -the configured webhook, or validating the JWT), for requests that are for a -remote GraphQL server. - -**For example**, you have a remote GraphQL server which does authentication, -i.e. signup and login, and you have added it as a remote schema. In this case, -you would not want to perform Hasura's authorization when the user is making a -login/signup request. - -There is no first-class option to currently do this via any configuration in -Hasura. However a similar solution can be achieved by the following workarounds: - -Bypassing webhook authorization -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -If you have a :ref:`webhook authorization setup `, in the normal scenario, your authorization -webhook would return ``200`` on success and ``401`` if it is either unable to authorize the current request or if -the authorization information is absent (like cookie, authorization header etc.) - -To bypass the webhook auth: - -- the webhook should respond with ``200`` and ``x-hasura-role: anonymous`` instead of a ``401`` when the - authorization information is absent or if it fails to resolve the authorization information. -- when adding the remote schema, check the ``Forward all headers from client`` option so that the remote server - will get the relevant cookie/header (from the client) and the role ``anonymous``. - -Bypassing JWT authorization -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -If you have a :ref:`JWT authorization setup `, to bypass the JWT auth: - -- your authentication server should generate a static JWT token for ``anonymous`` i.e. unauthenticated users. -- when adding the remote schema, check the ``Forward all headers from client`` option so that the remote server - will get the JWT (from the client). - -For example, the generated JWT can be: - -.. code-block:: json - - { - "sub": "0000000000", - "iat": 1516239022, - "role": "anonymous", - "https://hasura.io/jwt/claims": { - "x-hasura-allowed-roles": ["anonymous"], - "x-hasura-default-role": "anonymous" - } - } - - -Hasura will get this JWT and successfully validate it. When your remote server receives this JWT, it should -specifically validate the JWT and, for example, check for the ``role`` key in the JWT. If it is set to ``anonymous``, -then it should consider the request as unauthenticated. +.. toctree:: + :maxdepth: 1 + + adding-schema + schema-auth diff --git a/docs/graphql/manual/remote-schemas/schema-auth.rst b/docs/graphql/manual/remote-schemas/schema-auth.rst new file mode 100644 index 00000000000..78635fca1bb --- /dev/null +++ b/docs/graphql/manual/remote-schemas/schema-auth.rst @@ -0,0 +1,108 @@ +.. meta:: + :description: Authorization in your remote schema server with Hasura + :keywords: hasura, docs, remote schema, authorization + +.. _schema_auth: + +Authorization in your remote schema server +========================================== + +.. contents:: Table of contents + :backlinks: none + :depth: 2 + :local: + +Introduction +------------ + +This page gives an overview of how to manage authorization for your remote schemas. + +Authorization basics +-------------------- + +Hasura will forward the resolved ``x-hasura-*`` values as headers to your remote +schema. You can use this information to apply authorization rules in your +server. You don't have to redo authentication in your remote schema server. Native fine grained access control for remote schemas will be released soon. + +You can also configure Hasura to have (as shown :ref:`here `): + +1. static header values that are sent to the remote server +2. forward all headers from the client (like ``Authorization``, ``Cookie`` headers etc.) + +In case there are multiple headers with same name, the order of precedence is: +configuration headers > resolved user (``x-hasura-*``) variables > client headers. + +So for example, if the client sends an ``Authorization`` header, and the +configuration also has an ``Authorization`` header, the configuration header value +will selected. + +.. note:: + + The headers from the client behave similarly to the authorization system. If + ``x-hasura-admin-secret`` is sent, then all ``x-hasura-*`` values from the + client are respected, otherwise they are ignored. + +Cookie header from your remote GraphQL servers +---------------------------------------------- +``Set-Cookie`` headers from your remote schema servers are sent back to the +client over HTTP transport. **Over websocket transport there exists no means +of sending headers after a query/mutation and hence the ``Set-Cookie`` headers are +not sent to the client.** Use HTTP transport if your remote servers set cookies. + + +Bypassing Hasura's authorization system for remote schema requests +------------------------------------------------------------------ + +It might be necessary sometimes to bypass Hasura's authorization system (calling +the configured webhook, or validating the JWT), for requests that are for a +remote GraphQL server. + +**For example**, you have a remote GraphQL server which does authentication, +i.e. signup and login, and you have added it as a remote schema. In this case, +you would not want to perform Hasura's authorization when the user is making a +login/signup request. + +There is no first-class option to currently do this via any configuration in +Hasura. However a similar solution can be achieved by the following workarounds: + +Bypassing webhook authorization +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you have a :ref:`webhook authorization setup `, in the normal scenario, your authorization +webhook would return ``200`` on success and ``401`` if it is either unable to authorize the current request or if +the authorization information is absent (like cookie, authorization header etc.) + +To bypass the webhook auth: + +- the webhook should respond with ``200`` and ``x-hasura-role: anonymous`` instead of a ``401`` when the + authorization information is absent or if it fails to resolve the authorization information. +- when adding the remote schema, check the ``Forward all headers from client`` option so that the remote server + will get the relevant cookie/header (from the client) and the role ``anonymous``. + +Bypassing JWT authorization +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you have a :ref:`JWT authorization setup `, to bypass the JWT auth: + +- your authentication server should generate a static JWT token for ``anonymous`` i.e. unauthenticated users. +- when adding the remote schema, check the ``Forward all headers from client`` option so that the remote server + will get the JWT (from the client). + +For example, the generated JWT can be: + +.. code-block:: json + + { + "sub": "0000000000", + "iat": 1516239022, + "role": "anonymous", + "https://hasura.io/jwt/claims": { + "x-hasura-allowed-roles": ["anonymous"], + "x-hasura-default-role": "anonymous" + } + } + + +Hasura will get this JWT and successfully validate it. When your remote server receives this JWT, it should +specifically validate the JWT and, for example, check for the ``role`` key in the JWT. If it is set to ``anonymous``, +then it should consider the request as unauthenticated. diff --git a/docs/graphql/manual/schema/computed-fields.rst b/docs/graphql/manual/schema/computed-fields.rst index fece7d94a41..8fa2e890210 100644 --- a/docs/graphql/manual/schema/computed-fields.rst +++ b/docs/graphql/manual/schema/computed-fields.rst @@ -102,7 +102,7 @@ The return table must be tracked to define such a computed field. **Example:** -In a simple ``author <-> article`` schema, we can define a :ref:`relationship ` on the ``author`` +In a simple ``author <-> article`` schema, we can define a :ref:`table relationship ` on the ``author`` table to fetch authors along with their articles. We can make use of computed fields to fetch the author's articles with a search parameter. diff --git a/docs/graphql/manual/schema/index.rst b/docs/graphql/manual/schema/index.rst index e3da9c6cb76..95c10a3a3b3 100644 --- a/docs/graphql/manual/schema/index.rst +++ b/docs/graphql/manual/schema/index.rst @@ -29,7 +29,8 @@ Postgres constructs. :maxdepth: 1 Basics - Relationships + Table relationships + Remote relationships Extend with views Extend with SQL functions Default field values diff --git a/docs/graphql/manual/schema/remote-relationships/action-relationships.rst b/docs/graphql/manual/schema/remote-relationships/action-relationships.rst new file mode 100644 index 00000000000..4b9219fa6cc --- /dev/null +++ b/docs/graphql/manual/schema/remote-relationships/action-relationships.rst @@ -0,0 +1,203 @@ +.. meta:: + :description: Adding an action relationship with Hasura + :keywords: hasura, docs, action relationship, remote join + +.. _action_relationships: + + +Action relationships +==================== + +.. contents:: Table of contents + :backlinks: none + :depth: 2 + :local: + +Introduction +------------ + +:ref:`Actions ` are a way to extend Hasura’s schema with custom business logic using custom queries and mutations. The resolvers for these custom fields are written in REST endpoints. They are especially useful for setting up serverless functions as resolvers. + +Create an action relationship +----------------------------- + +Step 0: Create an action +^^^^^^^^^^^^^^^^^^^^^^^^ + +First, create an action, either :ref:`from scratch ` or :ref:`derive it from an existing mutation `. + +Step 1: Open the action relationship section +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- From your action, go to the ``Relationships`` tab. +- Click ``Add a relationship``. + +.. thumbnail:: /img/graphql/manual/remote-joins/action-rel.png + :alt: Opening the action relationship section + :width: 559px + +In this example, we're creating a relationship for the ``createUser`` action. + +Step 2: Define the relationship +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The following values can be defined for an action relationship: + +- **Relationship type**: Select a :ref:`type of relationship `. + + - **Object relationship**: For one-to-one relationships. + - **Array relationship**: For one-to-many relationships. + +- **Relationship name**: Create a name for the relationship. +- **Reference schema**: Select a reference schema from your database. +- **Reference table**: Select a table from your database. +- **From**: Select a field returned in the action response. +- **To**: Select a column from the reference table to join the field to. + +.. rst-class:: api_tabs +.. tabs:: + + .. tab:: Console + + In the section opened by the above step, fill out the following fields: + + .. thumbnail:: /img/graphql/manual/remote-joins/define-action-rel.png + :alt: Defining the relationship + :width: 850px + + .. tab:: CLI + + You can add an action relationship by adding it to the respective custom type in the ``actions.yaml`` file inside the ``metadata`` directory: + + .. code-block:: yaml + :emphasize-lines: 4-11 + + - custom_types + - objects + - name: UserOutput + relationships: + - remote_table: + schema: public + name: users + name: user + type: object + field_mapping: + id: id + + Apply the metadata by running: + + .. code-block:: bash + + hasura metadata apply + + .. tab:: API + + You can create an action relationship when defining custom types via the :ref:`set_custom_types metadata API `: + + .. code-block:: http + :emphasize-lines: 20-29 + + POST /v1/query HTTP/1.1 + Content-Type: application/json + X-Hasura-Role: admin + + { + "type": "set_custom_types", + "args": { + "scalars": [], + "enums": [], + "input_objects": [], + "objects": [ + { + "name": "UserOutput", + "fields": [ + { + "name": "id", + "type": "Int!" + } + ], + "relationships": [ + { + "name": "user", + "type": "object", + "remote_table": "users", + "field_mapping": { + "id": "id" + } + } + ] + } + ] + } + } + +In this example, we're creating a relationship called ``user``, from the ``id`` field returned in the action response, to the ``id`` column of the ``users`` table. + +Step 3: Explore with GraphiQL +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In the GraphiQL tab, test out your action relationship. + +.. graphiql:: + :view_only: + :query: + mutation { + createUser(name: "Hodor") { + id + user { + name + auth0_id + } + } + } + :response: + { + "data": { + "createUser": { + "id": "7ffd68ba-535e-4c72-9051-17cd4e8ed594", + "user": { + "name": "Hodor", + "auth0_id": "hodor|hodor" + } + } + } + } + +If your table has an existing :ref:`remote relationship `, you can also query the fields from the remote schema. + +.. graphiql:: + :view_only: + :query: + mutation { + createUser(name: "Hodor") { + id + user { + name + auth0_id + auth0_profile { + email + nickname + last_login + } + } + } + } + :response: + { + "data": { + "createUser": { + "id": "7ffd68ba-535e-4c72-9051-17cd4e8ed594", + "user": { + "name": "Hodor", + "auth0_id": "hodor|hodor", + "auth0_profile": { + "email": "hodor@hodor.com", + "nickname": "Hodor", + "last_login": "2016-05-22T01:35:48.863Z" + } + } + } + } + } + +In the :ref:`remote_schema_relationships` section, we joined our ``users`` table with a remote `Auth0 `__ schema. Here, we're able to get the Auth0 profile data of the user returned from our action. diff --git a/docs/graphql/manual/schema/remote-relationships/index.rst b/docs/graphql/manual/schema/remote-relationships/index.rst new file mode 100644 index 00000000000..f195f6a7cfc --- /dev/null +++ b/docs/graphql/manual/schema/remote-relationships/index.rst @@ -0,0 +1,50 @@ +.. meta:: + :description: Manage remote relationships in Hasura + :keywords: hasura, docs, schema, relationship, remote relationship + +.. _remote_relationships: + +Relationships between tables and external sources +================================================= + +.. contents:: Table of contents + :backlinks: none + :depth: 1 + :local: + +Introduction +------------ + +Hasura has a unique way of bringing data sources together and solving the data federation problem. This is done via remote joins wherein you can join data between data sources, similar to table relationships. + +With remote joins, the join, authorization, and consistency checks (of added sources) all happen at the Hasura layer via metadata. This allows underlying data sources and APIs to evolve independently. Your applications have a unified API to query the full data landscape in your org. + +Security +-------- + +Hasura's :ref:`authorization model ` gives you role-based access control. This extends to actions and remote schemas as well. In actions, you can go to the ``Permissions`` tab and choose which fields to expose for which roles. For remote schemas, Hasura will :ref:`forward your session variables ` which can be used to implement custom authorization in your remote schemas. Native role-based permissions on remote schemas is in the works. + +Performance +----------- + +Hasura strives for optimal performance. It creates an efficient execution plan which pushes down most of the heavy-lifting involved to underlying sources. For example, Hasura creates a single efficient query to your database and batches calls to remote schemas to avoid the `n+1 problem `__ . More improvements to performance are upcoming. + +Schema integrity & consistency +------------------------------ + +Hasura has metadata consistency checks at every level. Whenever you add a table, remote schema, or action, Hasura makes sure that the graph that is exposed is consistent, and that all the relationships make sense at a type level. This helps you in creating robust workflows to test changes in your CI and making safe deployments of your unified graph. + +Remote relationships modelling guides +------------------------------------- + +The following guides will help you model the different types of remote relationships in the database: + +- :ref:`remote_schema_relationships` +- :ref:`action_relationships` + +.. toctree:: + :maxdepth: 1 + :hidden: + + remote-schema-relationships + action-relationships diff --git a/docs/graphql/manual/schema/remote-relationships/remote-schema-relationships.rst b/docs/graphql/manual/schema/remote-relationships/remote-schema-relationships.rst new file mode 100644 index 00000000000..dc6ef119424 --- /dev/null +++ b/docs/graphql/manual/schema/remote-relationships/remote-schema-relationships.rst @@ -0,0 +1,168 @@ +.. meta:: + :description: Adding a remote schema relationship with Hasura + :keywords: hasura, docs, remote schema relationship, remote join, remote schema, data federation + +.. _remote_schema_relationships: + +Remote schema relationships +=========================== + +.. contents:: Table of contents + :backlinks: none + :depth: 2 + :local: + +Introduction +------------ + +Remote schema relationships extend the concept of joining data across tables, to joining across tables *and* remote data sources. Once you create relationships between types from your database and types created from APIs, you can then "join" them by running GraphQL queries. + +These APIs can be custom GraphQL servers you write, 3rd party SaaS APIs, or even other Hasura instances. + +Because Hasura is meant to be a GraphQL server that you can expose directly to your apps, Hasura also handles security and authorization while providing remote joins. + +.. note:: + + To see example use cases, check out this `blog post `__. + +.. admonition:: Supported from + + Remote schema relationships are supported from versions ``v.1.3.0`` and above. + +Create remote schema relationships +---------------------------------- + +Step 0: Add a remote schema +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Add a remote schema as described :ref:`here `. + +Step 1: Open the remote relationship section +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- From your table, go to the ``Relationships`` tab. +- Click the ``Add a remote relationship`` button. + +.. thumbnail:: /img/graphql/manual/remote-joins/add.png + :alt: Opening the remote relationship section + :width: 1000px + +Step 2: Define the relationship +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The following fields can be defined for a remote schema relationship: + +- **Name**: Define a name for the relationship. +- **Remote Schema**: Select a remote schema among all the ones you've created. +- **Configuration**: Set up the join configuration, to inject values as input arguments of the remote schema field. + + - **From column**: Input injected from table column values. + - **From static value**: Input injected from a static value of your choice. + +For this example, we assume that our schema has a ``users`` table with the fields ``name`` and ``auth0_id``. + +.. rst-class:: api_tabs +.. tabs:: + + .. tab:: Console + + .. thumbnail:: /img/graphql/manual/remote-joins/define.png + :alt: Defining the relationship + :width: 800px + + .. tab:: CLI + + You can add a remote schema relationship by adding it to the ``tables.yaml`` in the ``metadata`` directory: + + .. code-block:: yaml + :emphasize-lines: 4-13 + + - table: + schema: public + name: users + remote_relationships: + - definition: + remote_field: + auth0profile: + arguments: + id: $auth0_id + hasura_fields: + - auth0_id + remote_schema: auth0 + name: auth0 + + Apply the metadata by running: + + .. code-block:: bash + + hasura metadata apply + + .. tab:: API + + You can add a remote schema relationship by using the :ref:`create_remote_relationship metadata API `: + + .. code-block:: http + + POST /v1/query HTTP/1.1 + Content-Type: application/json + X-Hasura-Role: admin + + { + "type": "create_remote_relationship", + "args": { + "name": "auth0_profile", + "table": "users", + "hasura_fields": [ + "auth0_id" + ], + "remote_schema": "auth0", + "remote_field": { + "auth0": { + "arguments": { + "auth0_id": "$auth0_id" + } + } + } + } + } + +In this example, we've added a remote schema which is a wrapper around `Auth0 `__'s REST API (see example +`here `__). + +1. We name the relationship ``auth0_profile``. +2. We select the ``auth0`` schema that we've added. +3. We set up the config to join the ``auth0_id`` input argument of our remote schema field to the ``auth0_id`` column of this table (in this case, the ``users`` table). + +Step 3: Explore with GraphiQL +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In the GraphiQL tab, test out your remote schema relationship. + +.. graphiql:: + :view_only: + :query: + query { + users { + name + auth0_profile { + nickname + email + last_login + } + } + } + :response: + { + "data": { + "users": [ + { + "name": "Daenerys Targaryen", + "auth0_profile": { + "nickname": "Stormborn", + "email": "mother.of.dragons@unburnt.com", + "last_login": "2019-05-19T01:35:48.863Z" + } + } + ] + } + } diff --git a/docs/graphql/manual/schema/relationships/create.rst b/docs/graphql/manual/schema/table-relationships/create.rst similarity index 99% rename from docs/graphql/manual/schema/relationships/create.rst rename to docs/graphql/manual/schema/table-relationships/create.rst index a0c74a2fa37..3859ecb3109 100644 --- a/docs/graphql/manual/schema/relationships/create.rst +++ b/docs/graphql/manual/schema/table-relationships/create.rst @@ -12,6 +12,9 @@ Creating relationships :depth: 2 :local: +Introduction +------------ + A relationship from one table/view to another can be created by defining a link between a column of the table/view to a column of the other table/view. diff --git a/docs/graphql/manual/schema/relationships/database-modelling/index.rst b/docs/graphql/manual/schema/table-relationships/database-modelling/index.rst similarity index 100% rename from docs/graphql/manual/schema/relationships/database-modelling/index.rst rename to docs/graphql/manual/schema/table-relationships/database-modelling/index.rst diff --git a/docs/graphql/manual/schema/relationships/database-modelling/many-to-many.rst b/docs/graphql/manual/schema/table-relationships/database-modelling/many-to-many.rst similarity index 97% rename from docs/graphql/manual/schema/relationships/database-modelling/many-to-many.rst rename to docs/graphql/manual/schema/table-relationships/database-modelling/many-to-many.rst index 4b76248c969..1e9172f9236 100644 --- a/docs/graphql/manual/schema/relationships/database-modelling/many-to-many.rst +++ b/docs/graphql/manual/schema/table-relationships/database-modelling/many-to-many.rst @@ -12,6 +12,9 @@ Modelling many-to-many table relationships :depth: 1 :local: +Introduction +------------ + A ``many-to-many`` relationship between two tables can be established by creating a table typically called as **bridge/junction/join table** and adding **foreign-key constraints** from it to the original tables. @@ -36,8 +39,8 @@ These two tables are related via a ``many-to-many`` relationship. i.e: - an ``article`` can have many ``tags`` - a ``tag`` has many ``articles`` -Set up a table relationship in the database -------------------------------------------- +Step 1: Set up a table relationship in the database +--------------------------------------------------- This ``many-to-many`` relationship can be established in the database by: @@ -61,8 +64,8 @@ This ``many-to-many`` relationship can be established in the database by: The table ``article_tag`` sits between the two tables involved in the many-to-many relationship and captures possible permutations of their association via the foreign keys. -Set up GraphQL relationships ----------------------------- +Step 2: Set up GraphQL relationships +------------------------------------ To access the nested objects via the GraphQL API, :ref:`create the following relationships `: @@ -71,8 +74,8 @@ To access the nested objects via the GraphQL API, :ref:`create the following rel - Array relationship, ``tag_articles`` from ``tag`` table using ``article_tag :: tag_id -> id`` - Object relationship, ``article`` from ``article_tag`` table using ``article_id -> article :: id`` -Query using relationships -------------------------- +Step 3: Query using relationships +--------------------------------- We can now: diff --git a/docs/graphql/manual/schema/relationships/database-modelling/one-to-many.rst b/docs/graphql/manual/schema/table-relationships/database-modelling/one-to-many.rst similarity index 92% rename from docs/graphql/manual/schema/relationships/database-modelling/one-to-many.rst rename to docs/graphql/manual/schema/table-relationships/database-modelling/one-to-many.rst index eacdf7b0fa1..ed118c01594 100644 --- a/docs/graphql/manual/schema/relationships/database-modelling/one-to-many.rst +++ b/docs/graphql/manual/schema/table-relationships/database-modelling/one-to-many.rst @@ -12,6 +12,9 @@ Modelling one-to-many table relationships :depth: 1 :local: +Introduction +------------ + A ``one-to-many`` relationship between two tables can be established via a **foreign key constraint**. Say we have the following two tables in our database schema: @@ -35,8 +38,8 @@ These two tables are related via a ``one-to-many`` relationship. i.e: - an ``author`` can have many ``articles`` - an ``article`` has one ``author`` -Set up a table relationship in the database -------------------------------------------- +Step 1: Set up a table relationship in the database +--------------------------------------------------- This ``one-to-many`` relationship can be established in the database by: @@ -46,16 +49,16 @@ This ``one-to-many`` relationship can be established in the database by: This will ensure that the value of ``author_id`` column in the ``article`` table is present in the ``id`` column of the ``author`` table. -Set up GraphQL relationships ----------------------------- +Step 2: Set up GraphQL relationships +------------------------------------ To access the nested objects via the GraphQL API, :ref:`create the following relationships `: - Array relationship, ``articles`` from ``author`` table using ``article :: author_id -> id`` - Object relationship, ``author`` from ``article`` table using ``author_id -> author :: id`` -Query using relationships -------------------------- +Step 3: Query using relationships +--------------------------------- We can now: diff --git a/docs/graphql/manual/schema/relationships/database-modelling/one-to-one.rst b/docs/graphql/manual/schema/table-relationships/database-modelling/one-to-one.rst similarity index 93% rename from docs/graphql/manual/schema/relationships/database-modelling/one-to-one.rst rename to docs/graphql/manual/schema/table-relationships/database-modelling/one-to-one.rst index 801673a32a3..6334e094d5e 100644 --- a/docs/graphql/manual/schema/relationships/database-modelling/one-to-one.rst +++ b/docs/graphql/manual/schema/table-relationships/database-modelling/one-to-one.rst @@ -12,6 +12,9 @@ Modelling one-to-one table relationships :depth: 1 :local: +Introduction +------------ + A ``one-to-one`` relationship between two tables can be established via a **unique foreign key constraint**. Say we have the following two tables in our database schema: @@ -35,8 +38,8 @@ These two tables are related via a ``one-to-one`` relationship. i.e.: - an ``author`` can have one ``passport_info`` - a ``passport_info`` has one ``owner`` -Set up a table relationship in the database -------------------------------------------- +Step 1: Set up a table relationship in the database +--------------------------------------------------- This ``one-to-one`` relationship can be established in the database by: @@ -48,16 +51,16 @@ This ``one-to-one`` relationship can be established in the database by: This will ensure that the value of the ``owner_id`` column in ``passport_info`` table is present in the ``id`` column of the ``author`` table and there will be only one row with a particular ``owner_id``. -Set up GraphQL relationships ----------------------------- +Step 2: Set up GraphQL relationships +------------------------------------ To access the nested objects via the GraphQL API, :ref:`create the following relationships `: - Object relationship, ``passport_info`` from the ``author`` table using ``id -> passport_info :: owner_id`` - Object relationship, ``owner`` from the ``passport_info`` table using ``owner_id -> author :: id`` -Query using relationships -------------------------- +Step 3: Query using relationships +--------------------------------- We can now: diff --git a/docs/graphql/manual/schema/relationships/index.rst b/docs/graphql/manual/schema/table-relationships/index.rst similarity index 99% rename from docs/graphql/manual/schema/relationships/index.rst rename to docs/graphql/manual/schema/table-relationships/index.rst index f0163872270..b9b0ab8c9db 100644 --- a/docs/graphql/manual/schema/relationships/index.rst +++ b/docs/graphql/manual/schema/table-relationships/index.rst @@ -2,7 +2,7 @@ :description: Manage relationships between tables/views in Hasura :keywords: hasura, docs, schema, relationship -.. _relationships: +.. _table_relationships: Relationships between tables/views ================================== @@ -12,13 +12,14 @@ Relationships between tables/views :depth: 1 :local: +Introduction +------------ + To make :ref:`nested object queries `, the tables/views in your database need to be connected via relationships. Let's say we have the following tables in our database: ``author``, ``passport_info``, ``article`` and ``tag``. -.. _table_relationships: - Table relationships ------------------- diff --git a/docs/graphql/manual/schema/relationships/rename.rst b/docs/graphql/manual/schema/table-relationships/rename.rst similarity index 100% rename from docs/graphql/manual/schema/relationships/rename.rst rename to docs/graphql/manual/schema/table-relationships/rename.rst diff --git a/docs/graphql/manual/schema/using-existing-database.rst b/docs/graphql/manual/schema/using-existing-database.rst index 34492a7e0d9..edffb38915f 100644 --- a/docs/graphql/manual/schema/using-existing-database.rst +++ b/docs/graphql/manual/schema/using-existing-database.rst @@ -38,7 +38,7 @@ To track all tables and views present in the database: Step 2: Track foreign-keys -------------------------- -Tracking a foreign-key means creating a :ref:`relationship ` between the tables involved in the +Tracking a foreign-key means creating a :ref:`relationship ` between the tables involved in the foreign-key. To track a foreign-key between two tables in the database: diff --git a/docs/graphql/manual/security-disclosure/index.rst b/docs/graphql/manual/security-disclosure/index.rst index 1130ccdba7d..ee17c78d76e 100644 --- a/docs/graphql/manual/security-disclosure/index.rst +++ b/docs/graphql/manual/security-disclosure/index.rst @@ -4,7 +4,7 @@ .. _security_protocol: -Security vulnerability protocol +Security Vulnerability Protocol =============================== .. contents:: Table of contents diff --git a/docs/graphql/manual/subscriptions/use-cases.rst b/docs/graphql/manual/subscriptions/use-cases.rst index 0ac71aa7418..6c788eaa632 100644 --- a/docs/graphql/manual/subscriptions/use-cases.rst +++ b/docs/graphql/manual/subscriptions/use-cases.rst @@ -224,7 +224,7 @@ First, create a view ``poll_results`` to give the result of the poll: This view will have the following fields: ``poll_id``, ``option_id`` and ``votes``, i.e. it gives the number of votes received by each option for a poll. -Next, :ref:`setup relationships ` ``poll`` and ``option`` between the ``poll_results`` view +Next, :ref:`set up relationships ` ``poll`` and ``option`` between the ``poll_results`` view and the ``poll`` and ``option`` tables using the ``poll_id`` and ``option_id`` fields respectively. Now we can use the following subscription to display the latest poll result: diff --git a/docs/img/graphql/manual/remote-joins/action-rel.png b/docs/img/graphql/manual/remote-joins/action-rel.png new file mode 100644 index 0000000000000000000000000000000000000000..0700b05a44d9ee52f99d476e3275a3b0c56beff4 GIT binary patch literal 15722 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 C|2UNZ literal 0 HcmV?d00001 diff --git a/docs/img/graphql/manual/remote-joins/add.png b/docs/img/graphql/manual/remote-joins/add.png new file mode 100644 index 0000000000000000000000000000000000000000..a7891587329129d26a935b19f87a2ebae11baf22 GIT binary patch literal 31403 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%0A4Wf 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 literal 0 HcmV?d00001 diff --git a/docs/img/graphql/manual/remote-joins/define.png b/docs/img/graphql/manual/remote-joins/define.png new file mode 100644 index 0000000000000000000000000000000000000000..a02ef734bddfe5bf5b2437669d1f2186f39bfabb GIT binary patch literal 151008 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�vMQL8GfAEO+ZEnN079w&>Kby-tX~c8F5yP!H7f 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 Bi(3Ey literal 0 HcmV?d00001 diff --git a/docs/index.rst b/docs/index.rst index 7e852ab0d2b..4a81ad78808 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -17,4 +17,4 @@ Table of Contents :maxdepth: 2 :titlesonly: - Hasura GraphQL engine + Hasura GraphQL Engine