From cd198c1b301936a9392866e526e52340525946a3 Mon Sep 17 00:00:00 2001 From: sajeetharan Date: Mon, 8 Aug 2022 17:40:04 +0530 Subject: [PATCH 1/6] add getting started for Cosmos DB --- Hawaii-Cli/README.md | 6 +- docs/getting-started/authors.json | 38 ++++ docs/getting-started/books.json | 140 +++++++++++++ .../getting-started-azure-cosmos-db.md | 198 +++++++++++++++--- .../getting-started-azure-sql-db.md | 4 +- docs/getting-started/getting-started.md | 2 +- docs/media/cosmos-connection.png | Bin 0 -> 77661 bytes samples/getting-started/schema.gql | 0 8 files changed, 346 insertions(+), 42 deletions(-) create mode 100644 docs/getting-started/authors.json create mode 100644 docs/getting-started/books.json create mode 100644 docs/media/cosmos-connection.png create mode 100644 samples/getting-started/schema.gql diff --git a/Hawaii-Cli/README.md b/Hawaii-Cli/README.md index 0ecc6391fb..4b29618948 100644 --- a/Hawaii-Cli/README.md +++ b/Hawaii-Cli/README.md @@ -78,8 +78,4 @@ hawaii update user --name todo-005 --relationship owns --target.entity todo --ca hawaii update todo --name todo-005 --relationship owner --target.entity user --cardinality one --relationship.fields "owner_id:id" -``` - -## Contributing - -Please read through the [contributing guidelines](./CONTRIBUTING.md) +``` \ No newline at end of file diff --git a/docs/getting-started/authors.json b/docs/getting-started/authors.json new file mode 100644 index 0000000000..98684aa27f --- /dev/null +++ b/docs/getting-started/authors.json @@ -0,0 +1,38 @@ +[ + { + "id": "1", + "first_name": "Isaac", + "middle_name": "", + "last_name": "Asimov", + "books": [ + "1000", + "1001", + "1002", + "1003", + "1004", + "1005", + "1008" + ] + }, + { + "id": "2", + "first_name": "Robert", + "middle_name": "A", + "last_name": "Heinlein", + "books": [ + "1006", + "1007" + ] + }, + { + "id": "3", + "first_name": "Robert", + "middle_name": "", + "last_name": "Silvenberg", + "books": [ + "1008", + "1009", + "1010" + ] + } +] \ No newline at end of file diff --git a/docs/getting-started/books.json b/docs/getting-started/books.json new file mode 100644 index 0000000000..7f173165f3 --- /dev/null +++ b/docs/getting-started/books.json @@ -0,0 +1,140 @@ +[ + { + "id": "1000", + "title": "Foundation", + "authors": [ + { + "id": "1", + "first_name": "Isaac", + "middle_name": "", + "last_name": "Asimov" + } + ] + }, + { + "id": "1001", + "title": "Foundation and Empire", + "authors": [ + { + "id": "1", + "first_name": "Isaac", + "middle_name": "", + "last_name": "Asimov" + } + ] + }, + { + "id": "1002", + "title": "Second Foundation", + "authors": [ + { + "id": "1", + "first_name": "Isaac", + "middle_name": "", + "last_name": "Asimov" + } + ] + }, + { + "id": "1003", + "title": "Foundation's Edge", + "authors": [ + { + "id": "1", + "first_name": "Isaac", + "middle_name": "", + "last_name": "Asimov" + } + ] + }, + { + "id": "1004", + "title": "Foundation and Earth", + "authors": [ + { + "id": "1", + "first_name": "Isaac", + "middle_name": "", + "last_name": "Asimov" + } + ] + }, + { + "id": "1005", + "title": "Starship Troopers", + "authors": [ + { + "id": "1", + "first_name": "Isaac", + "middle_name": "", + "last_name": "Asimov" + } + ] + }, + { + "id": "1006", + "title": "Stranger in a Strange Land", + "authors": [ + { + "id": "2", + "first_name": "Isaac", + "middle_name": "", + "last_name": "Asimov" + } + ] + }, + { + "id": "1007", + "title": "Nightfall", + "authors": [ + { + "id": "2", + "first_name": "Robert", + "middle_name": "A", + "last_name": "Heinlein" + } + ] + }, + { + "id": "1008", + "title": "Nightwings", + "authors": [ + { + "id": "1", + "first_name": "Isaac", + "middle_name": "", + "last_name": "Asimov" + }, + { + "id": "3", + "first_name": "Robert", + "middle_name": "", + "last_name": "Silvenberg" + } + ] + }, + { + "id": "1009", + "title": "Across a Billion Years", + "authors": [ + { + "id": "3", + "first_name": "Robert", + "middle_name": "", + "last_name": "Silvenberg" + } + ] + }, + { + "id": "1010", + "title": "Across a Billion Years", + "authors": [ + { + "id": "3", + "first_name": "Robert", + "middle_name": "", + "last_name": "Silvenberg" + } + ] + } +] \ No newline at end of file diff --git a/docs/getting-started/getting-started-azure-cosmos-db.md b/docs/getting-started/getting-started-azure-cosmos-db.md index 2f8b3b0fcd..b47ee0423a 100644 --- a/docs/getting-started/getting-started-azure-cosmos-db.md +++ b/docs/getting-started/getting-started-azure-cosmos-db.md @@ -2,71 +2,162 @@ Make sure you have read the [Getting Started](getting-started.md) document. -As mentioned before, this tutorial assumes that you have already a Cosmos DB database that can used as playground. +As mentioned before, this tutorial assumes that you have already a Cosmos DB SQL API database that can used as playground. -## Get the database connection string +## Get the Cosmos DB Account connection string -## Add Book and Author entities +You can obtain the connection string by navigating to your Azure Cosmos DB account page's key blade, and select Primary connection string. Copy the value to use in the Data API Builder. +![Cosmos DB connection string](../media/cosmos-connection.png) -## Start Data API builder for Azure SQL Database +You can also use Azure Cosmos DB emulator connection string if you are testing locally. The Azure Cosmos DB Emulator supports a [single fixed account and a well-known authentication key](https://docs.microsoft.com/en-us/azure/azure-sql/database/connect-query-content-reference-guide?view=azuresql) -From the `sample` folder, where you should be already, start Data API builder engine (make sure you are using Powershell): +The connection string looks like, ``` -./run-dab.bat library.config.json +AccountEndpoint=AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==; ``` -when you'll see something like +Once you have the connection string, add it to the configuration file you have created before. It will look like the following if you are using Azure Cosmos DB: +```json +"data-source": { + "database-type": "cosmos", + "connection-string": "AccountEndpoint=yourEndpoint;AccountKey=yourkey" +} ``` -Now listening on: http://localhost:5000 -Now listening on: https://localhost:5001 + +and add the relevant database name in the Cosmos DB specific section of the configuration file + +```json + "cosmos": { + "database": "PlaygroundDB", + } ``` -then the engine is running. +## Create the database containers -## Query the endpoints +Create the necessary database containers needed to represent Authors and Books. -Now that Data API builder engine is running, you can use your favourite REST client (Postman or Insomnia, for example) to query the REST or the GraphQL endpoints. +- `authors`: Collection containing authors with 'id' as the partition key +- `books`: Collection containing books with 'id'a as the partition key -### REST Endpoint +Read more about [choosing partition key](https://docs.microsoft.com/en-us/azure/cosmos-db/partitioning-overview#choose-partitionkey) and [data modelling](https://docs.microsoft.com/en-us/azure/cosmos-db/sql/modeling-data) -REST endpoint is made available at the path: +Once the containers are created, you can import the sample data to the by using the [Data Import Tool](https://docs.microsoft.com/en-us/azure/cosmos-db/import-data#JSON). + +## Add Book and Author entities +We want to expose the books and the authors collections so that they can be used via Graphql. For doing that, all we needed is to add the related information to the entities section of the configuration file. + +> **NOTE**: REST operations are not supported for Cosmos DB via the +> Data API Builder, You can use the existing [REST API](https://docs.microsoft.com/en-us/rest/api/cosmos-db/) + +Start by adding the `author` entity: + +```json + "entities": { + "author": { + "source": "authors", + "rest": false, + "graphql": true, + "permissions": [ + { + "role": "anonymous", + "actions": [ "*" ] + } + ] + } ``` -/api/ + +within the `entities` object you can create any entity with any name (as long as it is valid for GraphQL). The name `author`, in this case, will be used to build the GraphQL type. Within the entity you have the `source` element that specifies which container contains the entity data. In our case it is `authors`. + +> **NOTE**: Entities names are case sensitive and they will be exposed via GraphQL as you have typed them. + +After that, you need to specify the permission for the exposed entity, so that you can be sure only those users making a request with the right claims will be able to access the entity and its data. In this getting started tutorial we're just allowing anyone, without the need to be authenticated, to perform all the CRUD operations to the `author` entity. + +You can also add the `book` entity now, applying the same concepts you just learnt for the `author` entity. Once you have added the `author` entity, the `entities` object of configuration file will look like the following: + +```json + "entities": { + "Author": { + "source": "authors", + "rest": false, + "graphql": true, + "permissions": [ + { + "role": "anonymous", + "actions": [ "*" ] + } + ] + }, + "Book": { + "source": "books", + "rest": false, + "graphql": true, + "permissions": [ + { + "role": "anonymous", + "actions": [ "*" ] + } + ] + } + } ``` +## Add Book and Author schema files -so if you want to get a list of all the available books you can simply run this GET request: +We need to expose the books and the authors collections so that they can be used via Graphql. Cosmos DB, being schema agnostic, we need to provide the schema definition for the collections. These schema definitions need to be added in the `schema.gql` file. +Start by adding the `author` nad `book` schema: + +```json +type Author @model { + id : ID, + first_name : String, + middle_name: String, + last_name: String, + Books: [Book] +} + +type Book @model { + id : ID, + title : String, + Authors: [String] +} ``` -/api/Book -``` -The following HTTP verbs are supported: +add the above schemas to the `samples/getting-started` schema.gql file. + +that's all is needed at the moment. Data API builder is ready to be run. -- GET: return one or more items -- POST: create a new item -- PUT: update or create an item -- DELETE: delete an item +> **BEST PRACTICE**: It is recommeneded to use the *singular* form for entities names. For GraphQL, the Data API builder engine will automatically use the correct plural form to generate the final GraphQL schema whenever a *list* of entity items will be returned. More on this behaviour in the [GraphQL documentation](./../graphql.md). -Whenver you need to access a single item, you can get the item you want by specifying its primary key: +## Start Data API builder for Azure Cosmos DB + +From the `samples/getting-started` folder, start Data API builder engine (use): + +``` +./run-dab.cmd library.config.json +``` + +Use `run-dab.sh` if you are on Linux. After a few seconds, you'll see something like ``` -GET /api/Book/id/1000 +Now listening on: http://localhost:5000 +Now listening on: https://localhost:5001 ``` -The ability to filter by primary key is supported by all verbs with the exception of POST as that verb is used to create a new iteam and therefore searching an item by its primary key is not applicable. +The Data API builder engine is running and is ready to accept requests. + -The GET verbs also support several query parameters that allows you to manipulate and refine the requested data: -- `$orderby`: defines how the returned data will be sorted -- `$first`: returns only the top `n` items -- `$filter`: filter the returned items -- `$select`: return only the selected columns +## Query the endpoints -For more details on how they can be used, read refer to the [REST documentation](./docs/REST.md) +Now that Data API builder engine is running, you can use your favourite REST client (Postman,Insomnia etc) to query the GraphQL endpoints. +### REST Endpoint + +Unlike other databases, Azure Cosmos DB does not have the support to generate REST endpoints as it already have an [REST API endpoint](https://docs.microsoft.com/en-us/rest/api/cosmos-db/) readily available. + ### GraphQL endpoint GraphQL endpoint is available at @@ -75,11 +166,11 @@ GraphQL endpoint is available at /graphql ``` -Use a GraphQL-capable REST client like Postman or Insomina to query the database using full GraphQL introspection capabilities. For example: +Use a GraphQL-capable REST client like Postman or Insomnia to query the database using full GraphQL introspection capabilities, to get intellisense and validation. For example: ```graphql { - books(first: 5) { + books(first: 5, orderBy: { title: DESC }) { items { id title @@ -87,3 +178,42 @@ Use a GraphQL-capable REST client like Postman or Insomina to query the database } } ``` + +will return the first five books ordered by title in descending order. + +## Graphql operations on entities relationships + +Everything up and working, and now you probably want to take advantage as much as possible of GraphQL capabilities to handle complex request in just one request.Forr example you may want to get all the Books in your library along with the Authors they have written. In order to achieve that you need to let Data API Builder know that you want that relationship to be available to be used in queries. We have defined the +data models in such a way that they can be queried at once. + +Using GraphQL you can now execute queries like: + +```graphql +{ + books(filter: { title: { eq: "Foundation" } }) + { + items { + id + title + authors { + + first_name + last_name + + } + } + } +} + +``` +This query will return List of books and it's Authors. + +Congratulations, you have just created a fully working backend to support your modern applications! + +## Deploy on Azure + + + +## Conclusion + + diff --git a/docs/getting-started/getting-started-azure-sql-db.md b/docs/getting-started/getting-started-azure-sql-db.md index d693f7cf34..3242a64c5f 100644 --- a/docs/getting-started/getting-started-azure-sql-db.md +++ b/docs/getting-started/getting-started-azure-sql-db.md @@ -44,7 +44,7 @@ Execute the script in the SQL Server or Azure SQL database you decided to use, s ## Add Book and Author entities -We want to expose the `books` and the `authors` table so that they can be used via REST or GraphQL. For doing that, all is needed is adding the related information to the `entities` section of the configuration file. +We want to expose the `books` and the `authors` table so that they can be used via REST or GraphQL. For doing that, all we needed to is to add the related information to the `entities` section of the configuration file. Start by adding the `author` entity: @@ -99,7 +99,7 @@ that's all is needed at the moment. Data API builder is ready to be run. ## Start Data API builder for Azure SQL Database -From the `sample` folder, where you should be already, start Data API builder engine (use): +From the `samples/getting-started` folder, start Data API builder engine (use): ``` ./run-dab.cmd library.config.json diff --git a/docs/getting-started/getting-started.md b/docs/getting-started/getting-started.md index 3151f61942..41dc315f61 100644 --- a/docs/getting-started/getting-started.md +++ b/docs/getting-started/getting-started.md @@ -2,7 +2,7 @@ Welcome to this getting started tutorial that will guide you to have Data API builder for Azure Databases running locally on your machine as a first step, and then will guide you to deploy Data API builder for Azure Databases in an Azure Container Instance, so that at the end of the tutorial you'll have full knowledge of what's needed to run Data API builder for Azure Databases both on-prem and in Azure. -## Pre-Requisite +## Prerequisites As the Data API builder for Azure Databases generate REST and GraphQL endpoints for database objects, you need to have a database ready to be used. You can choose either a relational or non-relational database. diff --git a/docs/media/cosmos-connection.png b/docs/media/cosmos-connection.png new file mode 100644 index 0000000000000000000000000000000000000000..c50704fa13f25c48533593289939bbc915674552 GIT binary patch literal 77661 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�zCxpi!4vTdNsW3)Ywuo0;z1<(B+{z5mXWT6T72Q*+Jp zqBWO?6c%GFrRi38N~0c*ylX<~=H&Mo?5)V9g>e`gigy0tTHSeX59aV_&w1-IS8;G( zdA{o%3L!^bJE|prjT!8}DQ@qT&YsiwNa8iZ0m#g-Eo)=-eC5B9r?mjZ`OoVr-mh{E z30uUH4XV_b!To!b;xE6zp8hy$8Z%e^dGqV9H#c@T`6jyJ{|Q{re^qx~fi=zL_6NBRO z&$Xh+ioZ(HV_j{*!VfQd|1pMQ`t`-a9vc+yQzri)TLZt~{4RXwxV-uQ(KJRK5HK0v zbZf{48UJmH0n%KTcawDkoTTx%VfW?v$v$YEEH1shM$>Fw)L^Vq7RZRMLpx*eukaai zuLZ@v2Ycg-&2KT*Ha0%8x@}jC?KNZI0{~&?`%FTmE1gi`@PA#(W14eIb91ogMfq(N zEWUUF$9@0&XCFN~yMp^g0Q8&=1f|C_LU-Paa`N!{b8Y^$;0l-R@M!`d5dsrLp zoSa-oU!Rn&E={5*(go#mv3bM($Qmq0SAaW4^22hF;6c50CBx#*!_`kG&{vbvlK)(O zIyi~QOqa0U!&~`!O}giZ0s*lqEF$7Z zg%A%9Nttoa#{wCNA2NvLmwa~b{_n=7v(zk5&SM>D7Jwahuvl^j4lbSM2_Q;*A61fp z1N#&GvWc*dAMZ3~s<9DX?VZf42w&>pFMkq>a+kh{JxT& z9y`u(p=Jd(FqBz50EvI36sQQy+wj@^=pclMg0>h~!L=Ue^w``_ZC;4~XJA-=6;~P1 zvTpDL4mzCGQ=_B)!1VdlT>)U$EqEwVU?&#Ma>nFsCKi@M>=jiN6*_u)43MkAqB=V} z+iPf@I65mU%Po@2dR8bM_!!mKYrFTX+b`B`77``>e_Ic{=wv~zy3)>iJK^s3>bo8r zb}7R0TB1sdalLu|y*K52_d#oD7vvW1jA7W*yz@{ou-N9e`@sNQH|PqiFw!g!@xIQ= z&Q4t~E-tPNv>mt`oI7E4r^o5i!+MHk7MJayE2jlLTXlX|PY~fd==0wo0N6#1Tfa7P zGh5#F=T0Ty!$2kln0IG*tek(T)AM53c6e7}PsFs(*S!wq#63NGyX84>oL~p&W*Fw( zLBReuuqCqL=9P3AP_K5^E-7Fo&6r^-nEA82FZB;Zz>;#Sq3&u~rXTrzurmT9wY=0M_y?N4l#^1c5 z#;6EylHM1&6nNZkcG^1N>7Dt9)MCS8Vsv&}M(5`00u!%#w7bW11>oU=-N2pwz*G!u zDTaiEELgPY(DUjJjRG@&i_XrAz&=Vdv~M!mMCzoTjKR@8njaHqbSs_M_b_io&{alo{tgKh4q;^e|j)Bk5c z_nRn9;)=Z0zI1w#JqsIj;?f3J2GvP-%rQ&ge~*J_e1r7^Js?{F7X80}PIk5d zhijrlZCO+A1cB#;ytpH|7#f&5_d8VFe>XkO zte%m9fr0NxyuzOIcb5IX3fywVz;LJM2X~8k-qy46Ku&}3M{$n#cXeJSegi3e;P8j_ z(CgP Date: Tue, 9 Aug 2022 19:32:49 +0530 Subject: [PATCH 2/6] fix PR comments and restructure --- .../{ => azure-cosmos-db}/authors.json | 0 .../{ => azure-cosmos-db}/books.json | 0 .../azure-sql-db}/library.azure-sql.sql | 0 .../getting-started-azure-cosmos-db.md | 16 ++++++++-------- .../getting-started-azure-sql-db.md | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) rename docs/getting-started/{ => azure-cosmos-db}/authors.json (100%) rename docs/getting-started/{ => azure-cosmos-db}/books.json (100%) rename {samples/getting-started => docs/getting-started/azure-sql-db}/library.azure-sql.sql (100%) diff --git a/docs/getting-started/authors.json b/docs/getting-started/azure-cosmos-db/authors.json similarity index 100% rename from docs/getting-started/authors.json rename to docs/getting-started/azure-cosmos-db/authors.json diff --git a/docs/getting-started/books.json b/docs/getting-started/azure-cosmos-db/books.json similarity index 100% rename from docs/getting-started/books.json rename to docs/getting-started/azure-cosmos-db/books.json diff --git a/samples/getting-started/library.azure-sql.sql b/docs/getting-started/azure-sql-db/library.azure-sql.sql similarity index 100% rename from samples/getting-started/library.azure-sql.sql rename to docs/getting-started/azure-sql-db/library.azure-sql.sql diff --git a/docs/getting-started/getting-started-azure-cosmos-db.md b/docs/getting-started/getting-started-azure-cosmos-db.md index b47ee0423a..d6f88fc3a4 100644 --- a/docs/getting-started/getting-started-azure-cosmos-db.md +++ b/docs/getting-started/getting-started-azure-cosmos-db.md @@ -40,15 +40,15 @@ and add the relevant database name in the Cosmos DB specific section of the conf Create the necessary database containers needed to represent Authors and Books. - `authors`: Collection containing authors with 'id' as the partition key -- `books`: Collection containing books with 'id'a as the partition key +- `books`: Collection containing books with 'id' as the partition key Read more about [choosing partition key](https://docs.microsoft.com/en-us/azure/cosmos-db/partitioning-overview#choose-partitionkey) and [data modelling](https://docs.microsoft.com/en-us/azure/cosmos-db/sql/modeling-data) -Once the containers are created, you can import the sample data to the by using the [Data Import Tool](https://docs.microsoft.com/en-us/azure/cosmos-db/import-data#JSON). +Once the containers are created, you can import the sample data which are placed in the 'azure-cosmos-db' folder to the respective collections by using the [Data Import Tool](https://docs.microsoft.com/en-us/azure/cosmos-db/import-data#JSON). ## Add Book and Author entities -We want to expose the books and the authors collections so that they can be used via Graphql. For doing that, all we needed is to add the related information to the entities section of the configuration file. +We want to expose the books and the authors collections so that they can be used via GraphQL. For doing that, all we need is to add the related information to the entities section of the configuration file. > **NOTE**: REST operations are not supported for Cosmos DB via the > Data API Builder, You can use the existing [REST API](https://docs.microsoft.com/en-us/rest/api/cosmos-db/) @@ -108,7 +108,7 @@ You can also add the `book` entity now, applying the same concepts you just lear We need to expose the books and the authors collections so that they can be used via Graphql. Cosmos DB, being schema agnostic, we need to provide the schema definition for the collections. These schema definitions need to be added in the `schema.gql` file. -Start by adding the `author` nad `book` schema: +Start by adding the `author` and `book` schema: ```json type Author @model { @@ -126,7 +126,7 @@ type Book @model { } ``` -add the above schemas to the `samples/getting-started` schema.gql file. +add the above schemas to the `samples/getting-started/azure-cosmos-db` schema.gql file. that's all is needed at the moment. Data API builder is ready to be run. @@ -156,7 +156,7 @@ Now that Data API builder engine is running, you can use your favourite REST cli ### REST Endpoint -Unlike other databases, Azure Cosmos DB does not have the support to generate REST endpoints as it already have an [REST API endpoint](https://docs.microsoft.com/en-us/rest/api/cosmos-db/) readily available. +Unlike other databases, Data API Builder for Azure Cosmos DB does not have the support to generate REST endpoints as it already has a [REST API endpoint](https://docs.microsoft.com/en-us/rest/api/cosmos-db/) readily available. ### GraphQL endpoint @@ -181,9 +181,9 @@ Use a GraphQL-capable REST client like Postman or Insomnia to query the database will return the first five books ordered by title in descending order. -## Graphql operations on entities relationships +## GraphQL operations on entities relationships -Everything up and working, and now you probably want to take advantage as much as possible of GraphQL capabilities to handle complex request in just one request.Forr example you may want to get all the Books in your library along with the Authors they have written. In order to achieve that you need to let Data API Builder know that you want that relationship to be available to be used in queries. We have defined the +Everything up and working, and now you probably want to take advantage as much as possible of GraphQL capabilities to handle complex request in just one request.For example you may want to get all the Books in your library along with the Authors they have written. In order to achieve that you need to let Data API Builder know that you want that relationship to be available to be used in queries. We have defined the data models in such a way that they can be queried at once. Using GraphQL you can now execute queries like: diff --git a/docs/getting-started/getting-started-azure-sql-db.md b/docs/getting-started/getting-started-azure-sql-db.md index 3242a64c5f..0387b500dc 100644 --- a/docs/getting-started/getting-started-azure-sql-db.md +++ b/docs/getting-started/getting-started-azure-sql-db.md @@ -34,7 +34,7 @@ Once you have your connection string, add it to the configuration file you have ## Create the database objects -Create the database tables needed to represent Authors, Books and the many-to-many relationship between Authors and Books. You can find the `libray.azure-sql.sql` script that you can use to create three tables, along with sample data: +Create the database tables needed to represent Authors, Books and the many-to-many relationship between Authors and Books. You can find the `libray.azure-sql.sql` script in the 'azure-sql-db' folder that you can use to create three tables, along with sample data: - `dbo.authors`: Table containing authors - `dbo.books`: Table containing books @@ -44,7 +44,7 @@ Execute the script in the SQL Server or Azure SQL database you decided to use, s ## Add Book and Author entities -We want to expose the `books` and the `authors` table so that they can be used via REST or GraphQL. For doing that, all we needed to is to add the related information to the `entities` section of the configuration file. +We want to expose the `books` and the `authors` table so that they can be used via REST or GraphQL. For doing that, all we need to is to add the related information to the `entities` section of the configuration file. Start by adding the `author` entity: From e9347c1402d6ae75bd34b8924637c16f535cd301 Mon Sep 17 00:00:00 2001 From: sajeetharan Date: Wed, 10 Aug 2022 18:52:39 +0530 Subject: [PATCH 3/6] resolve PR comments --- .../getting-started-azure-cosmos-db.md | 20 +++++++++---------- .../getting-started-azure-sql-db.md | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/getting-started/getting-started-azure-cosmos-db.md b/docs/getting-started/getting-started-azure-cosmos-db.md index d6f88fc3a4..50968e08d5 100644 --- a/docs/getting-started/getting-started-azure-cosmos-db.md +++ b/docs/getting-started/getting-started-azure-cosmos-db.md @@ -2,7 +2,7 @@ Make sure you have read the [Getting Started](getting-started.md) document. -As mentioned before, this tutorial assumes that you have already a Cosmos DB SQL API database that can used as playground. +This tutorial assumes that you have already a [Cosmos DB SQL API database account](https://docs.microsoft.com/en-us/azure/cosmos-db/sql/create-cosmosdb-resources-portal#create-an-azure-cosmos-db-account) that can used as playground. ## Get the Cosmos DB Account connection string @@ -15,7 +15,7 @@ You can also use Azure Cosmos DB emulator connection string if you are testing l The connection string looks like, ``` -AccountEndpoint=AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==; +AccountEndpoint=AccountEndpoint=https://localhost:8081/;AccountKey=REPLACEME; ``` Once you have the connection string, add it to the configuration file you have created before. It will look like the following if you are using Azure Cosmos DB: @@ -23,7 +23,7 @@ Once you have the connection string, add it to the configuration file you have c ```json "data-source": { "database-type": "cosmos", - "connection-string": "AccountEndpoint=yourEndpoint;AccountKey=yourkey" + "connection-string": "AccountEndpoint=yourEndpoint;AccountKey=REPLACEME" } ``` @@ -110,7 +110,7 @@ We need to expose the books and the authors collections so that they can be used Start by adding the `author` and `book` schema: -```json +```graphql type Author @model { id : ID, first_name : String, @@ -126,9 +126,9 @@ type Book @model { } ``` -add the above schemas to the `samples/getting-started/azure-cosmos-db` schema.gql file. +Add the above schemas to the `samples/getting-started/azure-cosmos-db` schema.gql file. -that's all is needed at the moment. Data API builder is ready to be run. +That's all you need at the moment. Data API builder is ready to be run. > **BEST PRACTICE**: It is recommeneded to use the *singular* form for entities names. For GraphQL, the Data API builder engine will automatically use the correct plural form to generate the final GraphQL schema whenever a *list* of entity items will be returned. More on this behaviour in the [GraphQL documentation](./../graphql.md). @@ -152,11 +152,11 @@ The Data API builder engine is running and is ready to accept requests. ## Query the endpoints -Now that Data API builder engine is running, you can use your favourite REST client (Postman,Insomnia etc) to query the GraphQL endpoints. +Now that the Data API builder engine is running, you can use your favourite REST client (Postman, Insomnia, etc.) to query the GraphQL endpoints. ### REST Endpoint -Unlike other databases, Data API Builder for Azure Cosmos DB does not have the support to generate REST endpoints as it already has a [REST API endpoint](https://docs.microsoft.com/en-us/rest/api/cosmos-db/) readily available. +Unlike other databases, Data API Builder for Azure Cosmos DB does not support generating REST endpoints because there is already a[REST API endpoint](https://docs.microsoft.com/en-us/rest/api/cosmos-db/) capability built-in to the Azure Cosmos DB service. ### GraphQL endpoint @@ -166,7 +166,7 @@ GraphQL endpoint is available at /graphql ``` -Use a GraphQL-capable REST client like Postman or Insomnia to query the database using full GraphQL introspection capabilities, to get intellisense and validation. For example: +Use a GraphQL-capable REST client like Postman or Insomnia to query the database using full GraphQL introspection capabilities and to get IntelliSense and validation. For example: ```graphql { @@ -206,7 +206,7 @@ Using GraphQL you can now execute queries like: } ``` -This query will return List of books and it's Authors. +This query will return List of books and its Authors. Congratulations, you have just created a fully working backend to support your modern applications! diff --git a/docs/getting-started/getting-started-azure-sql-db.md b/docs/getting-started/getting-started-azure-sql-db.md index 0387b500dc..6089003fb6 100644 --- a/docs/getting-started/getting-started-azure-sql-db.md +++ b/docs/getting-started/getting-started-azure-sql-db.md @@ -44,7 +44,7 @@ Execute the script in the SQL Server or Azure SQL database you decided to use, s ## Add Book and Author entities -We want to expose the `books` and the `authors` table so that they can be used via REST or GraphQL. For doing that, all we need to is to add the related information to the `entities` section of the configuration file. +We want to expose the `books` and the `authors` table so that they can be used via REST or GraphQL. For doing that, all we need is to add the related information to the `entities` section of the configuration file. Start by adding the `author` entity: @@ -99,7 +99,7 @@ that's all is needed at the moment. Data API builder is ready to be run. ## Start Data API builder for Azure SQL Database -From the `samples/getting-started` folder, start Data API builder engine (use): +From the `samples/getting-started` folder, start Data API Builder engine : ``` ./run-dab.cmd library.config.json From 3300d8b45e98fed59636349c3a0b046f2f5f6d5e Mon Sep 17 00:00:00 2001 From: sajeetharan Date: Wed, 10 Aug 2022 18:58:25 +0530 Subject: [PATCH 4/6] fix PR comments --- docs/getting-started/azure-cosmos-db/authors.json | 3 ++- docs/getting-started/azure-cosmos-db/books.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/getting-started/azure-cosmos-db/authors.json b/docs/getting-started/azure-cosmos-db/authors.json index 98684aa27f..8aa27f4899 100644 --- a/docs/getting-started/azure-cosmos-db/authors.json +++ b/docs/getting-started/azure-cosmos-db/authors.json @@ -35,4 +35,5 @@ "1010" ] } -] \ No newline at end of file +] + diff --git a/docs/getting-started/azure-cosmos-db/books.json b/docs/getting-started/azure-cosmos-db/books.json index 7f173165f3..71a8272b11 100644 --- a/docs/getting-started/azure-cosmos-db/books.json +++ b/docs/getting-started/azure-cosmos-db/books.json @@ -137,4 +137,5 @@ } ] } -] \ No newline at end of file +] + From d7267beff6aebd9837c168237e38cbb3d857348a Mon Sep 17 00:00:00 2001 From: sajeetharan Date: Wed, 10 Aug 2022 20:45:58 +0530 Subject: [PATCH 5/6] commit missed changes --- .../getting-started-azure-cosmos-db.md | 11 ++--------- docs/getting-started/getting-started-azure-sql-db.md | 2 +- docs/getting-started/getting-started.md | 2 +- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/docs/getting-started/getting-started-azure-cosmos-db.md b/docs/getting-started/getting-started-azure-cosmos-db.md index 50968e08d5..4bfa7d55cb 100644 --- a/docs/getting-started/getting-started-azure-cosmos-db.md +++ b/docs/getting-started/getting-started-azure-cosmos-db.md @@ -181,9 +181,9 @@ Use a GraphQL-capable REST client like Postman or Insomnia to query the database will return the first five books ordered by title in descending order. -## GraphQL operations on entities relationships +## GraphQL operations on entity relationships -Everything up and working, and now you probably want to take advantage as much as possible of GraphQL capabilities to handle complex request in just one request.For example you may want to get all the Books in your library along with the Authors they have written. In order to achieve that you need to let Data API Builder know that you want that relationship to be available to be used in queries. We have defined the +With your GraphQL endpoint operational, you probably want to take advantage of GraphQL's ability to handle complex requests.For example, you may want to get all the Books in your library along with the Authors they have written. In order to achieve that, you need to let Data API Builder know that you want that relationship to be available to be used in queries. We have defined the data models in such a way that they can be queried at once. Using GraphQL you can now execute queries like: @@ -210,10 +210,3 @@ This query will return List of books and its Authors. Congratulations, you have just created a fully working backend to support your modern applications! -## Deploy on Azure - - - -## Conclusion - - diff --git a/docs/getting-started/getting-started-azure-sql-db.md b/docs/getting-started/getting-started-azure-sql-db.md index 6089003fb6..0680d57075 100644 --- a/docs/getting-started/getting-started-azure-sql-db.md +++ b/docs/getting-started/getting-started-azure-sql-db.md @@ -44,7 +44,7 @@ Execute the script in the SQL Server or Azure SQL database you decided to use, s ## Add Book and Author entities -We want to expose the `books` and the `authors` table so that they can be used via REST or GraphQL. For doing that, all we need is to add the related information to the `entities` section of the configuration file. +Now, you'll want to expose the `books` and the `authors` table as REST or GraphQL endpoints. To do that, add the following information to the `entities` section of the configuration file. Start by adding the `author` entity: diff --git a/docs/getting-started/getting-started.md b/docs/getting-started/getting-started.md index 41dc315f61..7fb2735c19 100644 --- a/docs/getting-started/getting-started.md +++ b/docs/getting-started/getting-started.md @@ -55,7 +55,7 @@ In the `data-source` section you have to specify the database type and the conne `database-type` can be any of the following: - `mssql`: for Azure SQL DB, Azure SQL MI or SQL Server -- `cosmos`: for Azure Cosmos DB +- `cosmos`: for Azure Cosmos DB (SQL API) - `postgresql`: for PostgreSQL - `mariadb`: for MariaDB - `mysql`: for MySQL From 24231d46530de81956dcb49a1e93393a24d820e3 Mon Sep 17 00:00:00 2001 From: sajeetharan Date: Fri, 12 Aug 2022 11:26:22 +0530 Subject: [PATCH 6/6] PR comment minor fix --- docs/getting-started/getting-started-azure-cosmos-db.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started/getting-started-azure-cosmos-db.md b/docs/getting-started/getting-started-azure-cosmos-db.md index 4bfa7d55cb..65e5d6795c 100644 --- a/docs/getting-started/getting-started-azure-cosmos-db.md +++ b/docs/getting-started/getting-started-azure-cosmos-db.md @@ -2,7 +2,7 @@ Make sure you have read the [Getting Started](getting-started.md) document. -This tutorial assumes that you have already a [Cosmos DB SQL API database account](https://docs.microsoft.com/en-us/azure/cosmos-db/sql/create-cosmosdb-resources-portal#create-an-azure-cosmos-db-account) that can used as playground. +This tutorial assumes that you have already a [Cosmos DB SQL API database account](https://docs.microsoft.com/en-us/azure/cosmos-db/sql/create-cosmosdb-resources-portal#create-an-azure-cosmos-db-account) that can be used as a playground. ## Get the Cosmos DB Account connection string