-
Notifications
You must be signed in to change notification settings - Fork 205
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #26 from appwrite/add-node-quickstart
Add Server SDK Quickstarts
- Loading branch information
Showing
3 changed files
with
394 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,202 @@ | ||
--- | ||
layout: article | ||
title: Start with Dart | ||
description: This is the description used for SEO. | ||
--- | ||
Learn to setup your first Dart project powered by Appwrite. | ||
{% section #step-1 step=1 title="Create project" %} | ||
Head to the [Appwrite Console](https://cloud.appwrite.io/console). | ||
|
||
![Create project screen](/images/docs/databases/quick-start/create-project.png) | ||
|
||
If this is your first time using Appwrite, create an account and create your first project. | ||
|
||
|
||
Then, under **Integrate with your server**, add an **API Key** with the following scopes. | ||
|
||
| Category {% width=120 %} | Required scopes | Purpose | | ||
|-----------|-----------------------|---------| | ||
| Database | `databases.write` | Allows API key to create, update, and delete [databases](/docs/products/databases/databases). | | ||
| | `collections.write` | Allows API key to create, update, and delete [collections](/docs/products/databases/collections). | | ||
| | `attributes.write` | Allows API key to create, update, and delete [attributes](/docs/products/databases/collections#attributes). | | ||
| | `documents.read` | Allows API key to create, update, and delete [documents](/docs/products/databases/documents). | | ||
| | `documents.write` | Allows API key to read [documents](/docs/products/databases/documents). | | ||
|
||
Other scopes are optional. | ||
|
||
![Add API Key]() | ||
|
||
{% /section %} | ||
{% section #step-2 step=2 title="Create Dart project" %} | ||
Create a Dart CLI application. | ||
|
||
```sh | ||
dart create -t console my_app | ||
cd my_app | ||
``` | ||
|
||
After entering the project directory, remove the `lib/` and `test/` directories. | ||
|
||
{% /section %} | ||
{% section #step-3 step=3 title="Install Appwrite" %} | ||
|
||
Install the Dart Appwrite SDK. | ||
|
||
```sh | ||
dart pub add dart_appwrite | ||
``` | ||
{% /section %} | ||
{% section #step-4 step=4 title="Import Appwrite" %} | ||
|
||
Find your project ID in the **Settings** page. Also, click on the **View API Keys** button to find the API key that was created earlier. | ||
|
||
![Settings page in Appwrite Console.](/images/docs/databases/quick-start/project-id.png) | ||
|
||
Open `bin/my_app.dart` and initialize the Appwrite Client. Replace `<YOUR_PROJECT_ID>` with your project ID and `<YOUR_API_KEY>` with your API key. | ||
|
||
```dart | ||
import 'package:dart_appwrite/dart_appwrite.dart'; | ||
|
||
var client = Client(); | ||
|
||
Future<void> main() async { | ||
client | ||
.setEndpoint("https://cloud.appwrite.io/v1") | ||
.setProject("<YOUR_PROJECT_ID>") | ||
.setKey("<YOUR_API_KEY>"); | ||
} | ||
``` | ||
|
||
{% /section %} | ||
{% section #step-5 step=5 title="Initialize database" %} | ||
|
||
Once the Appwrite Client is initialized, create a function to configure a todo collection. | ||
|
||
```dart | ||
var databases; | ||
var todoDatabase; | ||
var todoCollection; | ||
|
||
Future<void> prepareDatabase() async { | ||
databases = Databases(client); | ||
|
||
todoDatabase = await databases.create( | ||
databaseId: ID.unique(), | ||
name: 'TodosDB' | ||
); | ||
|
||
todoCollection = await databases.createCollection( | ||
databaseId: todoDatabase.$id, | ||
collectionId: ID.unique(), | ||
name: 'Todos' | ||
); | ||
|
||
await databases.createStringAttribute( | ||
databaseId: todoDatabase.$id, | ||
collectionId: todoCollection.$id, | ||
key: 'title', | ||
size: 255, | ||
xrequired: true | ||
); | ||
|
||
await databases.createStringAttribute( | ||
databaseId: todoDatabase.$id, | ||
collectionId: todoCollection.$id, | ||
key: 'description', | ||
size: 255, | ||
xrequired: false, | ||
xdefault: 'This is a test description' | ||
); | ||
|
||
await databases.createBooleanAttribute( | ||
databaseId: todoDatabase.$id, | ||
collectionId: todoCollection.$id, | ||
key: 'isComplete', | ||
xrequired: true | ||
); | ||
} | ||
``` | ||
|
||
{% /section %} | ||
{% section #step-6 step=6 title="Add documents" %} | ||
Create a function to add some mock data into your new collection. | ||
```dart | ||
Future<void> seedDatabase() async { | ||
var testTodo1 = { | ||
'title': 'Buy apples', | ||
'description': 'At least 2KGs', | ||
'isComplete': true | ||
}; | ||
|
||
var testTodo2 = { | ||
'title': 'Wash the apples', | ||
'isComplete': true | ||
}; | ||
|
||
var testTodo3 = { | ||
'title': 'Cut the apples', | ||
'description': 'Don\'t forget to pack them in a box', | ||
'isComplete': false | ||
}; | ||
|
||
await databases.createDocument( | ||
databaseId: todoDatabase.$id, | ||
collectionId: todoCollection.$id, | ||
documentId: ID.unique(), | ||
data: testTodo1 | ||
); | ||
|
||
await databases.createDocument( | ||
databaseId: todoDatabase.$id, | ||
collectionId: todoCollection.$id, | ||
documentId: ID.unique(), | ||
data: testTodo2 | ||
); | ||
|
||
await databases.createDocument( | ||
databaseId: todoDatabase.$id, | ||
collectionId: todoCollection.$id, | ||
documentId: ID.unique(), | ||
data: testTodo3 | ||
); | ||
} | ||
``` | ||
|
||
{% /section %} | ||
{% section #step-7 step=7 title="Retrieve documents" %} | ||
|
||
Create a function to retrieve the mock todo data. | ||
```dart | ||
Future<void> getTodos() async { | ||
var todos = await databases.listDocuments( | ||
databaseId: todoDatabase.$id, | ||
collectionId: todoCollection.$id | ||
); | ||
|
||
todos.documents.forEach((todo) { | ||
print('Title: ${todo.data['title']}\nDescription: ${todo.data['description']}\nIs Todo Complete: ${todo.data['isComplete']}\n\n'); | ||
}); | ||
} | ||
``` | ||
|
||
Finally, revisit the `main()` function and call the functions created in previous steps. | ||
```dart | ||
Future<void> main() async { | ||
client | ||
.setEndpoint("https://cloud.appwrite.io/v1") | ||
.setProject("<YOUR_PROJECT_ID>") | ||
.setKey("<YOUR_API_KEY>"); | ||
|
||
await prepareDatabase(); | ||
await Future.delayed(const Duration(seconds: 1)); | ||
await seedDatabase(); | ||
await getTodos(); | ||
} | ||
``` | ||
|
||
{% /section %} | ||
{% section #step-8 step=8 title="All set" %} | ||
|
||
Run your project with `dart run bin/my_app.dart` and view the response in your console. | ||
|
||
{% /section %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,191 @@ | ||
--- | ||
layout: article | ||
title: Start with Node.js | ||
description: This is the description used for SEO. | ||
--- | ||
Learn to setup your first Node.js project powered by Appwrite. | ||
{% section #step-1 step=1 title="Create project" %} | ||
Head to the [Appwrite Console](https://cloud.appwrite.io/console). | ||
|
||
![Create project screen](/images/docs/databases/quick-start/create-project.png) | ||
|
||
If this is your first time using Appwrite, create an account and create your first project. | ||
|
||
Then, under **Integrate with your server**, add an **API Key** with the following scopes. | ||
|
||
| Category {% width=120 %} | Required scopes | Purpose | | ||
|-----------|-----------------------|---------| | ||
| Database | `databases.write` | Allows API key to create, update, and delete [databases](/docs/products/databases/databases). | | ||
| | `collections.write` | Allows API key to create, update, and delete [collections](/docs/products/databases/collections). | | ||
| | `attributes.write` | Allows API key to create, update, and delete [attributes](/docs/products/databases/collections#attributes). | | ||
| | `documents.read` | Allows API key to create, update, and delete [documents](/docs/products/databases/documents). | | ||
| | `documents.write` | Allows API key to read [documents](/docs/products/databases/documents). | | ||
|
||
Other scopes are optional. | ||
|
||
![Add API Key]() | ||
|
||
{% /section %} | ||
{% section #step-2 step=2 title="Create Node.js project" %} | ||
Create a Node.js CLI application. | ||
|
||
```sh | ||
mkdir my-app | ||
cd my-app | ||
npm init | ||
``` | ||
|
||
{% /section %} | ||
{% section #step-3 step=3 title="Install Appwrite" %} | ||
|
||
Install the Node.js Appwrite SDK. | ||
|
||
```sh | ||
npm install node-appwrite | ||
``` | ||
{% /section %} | ||
{% section #step-4 step=4 title="Import Appwrite" %} | ||
|
||
Find your project ID in the **Settings** page. Also, click on the **View API Keys** button to find the API key that was created earlier. | ||
|
||
![Settings page in Appwrite Console.](/images/docs/databases/quick-start/project-id.png) | ||
|
||
Create a new file `app.js` and initialize the Appwrite Client. Replace `<YOUR_PROJECT_ID>` with your project ID and `<YOUR_API_KEY>` with your API key. | ||
|
||
```js | ||
const sdk = require("node-appwrite"); | ||
|
||
const client = new sdk.Client(); | ||
|
||
client | ||
.setEndpoint("https://cloud.appwrite.io/v1") | ||
.setProject("<YOUR_PROJECT_ID>") | ||
.setKey("<YOUR_API_KEY>"); | ||
``` | ||
|
||
{% /section %} | ||
{% section #step-5 step=5 title="Initialize database" %} | ||
|
||
Once the Appwrite Client is initialized, create a function to configure a todo collection. | ||
|
||
```js | ||
const databases = new sdk.Databases(client); | ||
|
||
var todoDatabase; | ||
var todoCollection; | ||
|
||
async function prepareDatabase() { | ||
todoDatabase = await databases.create( | ||
sdk.ID.unique(), | ||
'TodosDB' | ||
); | ||
|
||
todoCollection = await databases.createCollection( | ||
todoDatabase.$id, | ||
sdk.ID.unique(), | ||
'Todos' | ||
); | ||
|
||
await databases.createStringAttribute( | ||
todoDatabase.$id, | ||
todoCollection.$id, | ||
'title', | ||
255, | ||
true | ||
); | ||
|
||
await databases.createStringAttribute( | ||
todoDatabase.$id, | ||
todoCollection.$id, | ||
'description', | ||
255, false, | ||
'This is a test description' | ||
); | ||
|
||
await databases.createBooleanAttribute( | ||
todoDatabase.$id, | ||
todoCollection.$id, | ||
'isComplete', | ||
true | ||
); | ||
} | ||
``` | ||
|
||
{% /section %} | ||
{% section #step-6 step=6 title="Add documents" %} | ||
Create a function to add some mock data into your new collection. | ||
```js | ||
async function seedDatabase() { | ||
var testTodo1 = { | ||
title: 'Buy apples', | ||
description: 'At least 2KGs', | ||
isComplete: true | ||
}; | ||
|
||
var testTodo2 = { | ||
title: 'Wash the apples', | ||
isComplete: true | ||
}; | ||
|
||
var testTodo3 = { | ||
title: 'Cut the apples', | ||
description: 'Don\'t forget to pack them in a box', | ||
isComplete: false | ||
}; | ||
|
||
await databases.createDocument( | ||
todoDatabase.$id, | ||
todoCollection.$id, | ||
sdk.ID.unique(), | ||
testTodo1 | ||
); | ||
|
||
await databases.createDocument( | ||
todoDatabase.$id, | ||
todoCollection.$id, | ||
sdk.ID.unique(), | ||
testTodo2 | ||
); | ||
|
||
await databases.createDocument( | ||
todoDatabase.$id, | ||
todoCollection.$id, | ||
sdk.ID.unique(), | ||
testTodo3 | ||
); | ||
} | ||
``` | ||
|
||
{% /section %} | ||
{% section #step-7 step=7 title="Retrieve documents" %} | ||
|
||
Create a function to retrieve the mock todo data and a function to execute the requests in order. | ||
Run the functions to by calling `runAllTasks();`. | ||
|
||
```js | ||
async function getTodos() { | ||
var todos = await databases.listDocuments( | ||
todoDatabase.$id, | ||
todoCollection.$id | ||
); | ||
|
||
todos.documents.forEach(todo => { | ||
console.log(`Title: ${todo.title}\nDescription: ${todo.description}\nIs Todo Complete: ${todo.isComplete}\n\n`); | ||
}); | ||
} | ||
|
||
async function runAllTasks() { | ||
await prepareDatabase(); | ||
await seedDatabase(); | ||
await getTodos(); | ||
} | ||
runAllTasks(); | ||
``` | ||
|
||
{% /section %} | ||
|
||
{% section #step-8 step=8 title="All set" %} | ||
|
||
Run your project with `node app.js` and view the response in your console. | ||
|
||
{% /section %} |
Oops, something went wrong.