Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/flutterando/dartion

Json Server RESTful, Up your backend in 5 Seconds!
https://github.com/flutterando/dartion

Last synced: 3 days ago
JSON representation

Json Server RESTful, Up your backend in 5 Seconds!

Awesome Lists containing this project

README

        

DARTION





Dartion package Logo


A RESTful mini web server based on JSON.


This is not just a port of the popular json-server for Dart, it also adds some more features like JWT Authentication.


Explore the docs »





·
Report Bug
·
Request Feature


[![Version](https://img.shields.io/github/v/release/flutterando/dartion?style=plastic)](https://pub.dev/packages/dartion)
[![Pub Points](https://img.shields.io/pub/points/dartion?label=pub%20points&style=plastic)](https://pub.dev/packages/dartion/score)
[![Flutterando Analysis](https://img.shields.io/badge/style-flutterando__analysis-blueviolet?style=plastic)](https://pub.dev/packages/flutterando_analysis/)

[![Pub Publisher](https://img.shields.io/pub/publisher/dartion?style=plastic)](https://pub.dev/publishers/flutterando.com.br/packages)


Table of Contents


  1. About The Project

  2. Sponsors

  3. Getting Started

  4. How to Use

  5. Features

  6. Contributing

  7. Contact

  8. Acknowledgements


## About The Project

Get your backend up in 5 seconds!
Dartion aims to make it easier for those who take front-end video lessons in languages like Flutter and need a server to implement and test their codes.
Just get the DartSDK, install Dartion, initialize the server and start it, that's all!
It comes with support to HTTP requests and JWT Authentication.
After installing, just populate the db.json file and you will have a simple and ready to use database.


This project is distributed under the MIT License. See `LICENSE.txt` for more information.

(back to top)

## Sponsors


Logo

(back to top)



## Getting Started

1. Get the [Dart SDK](https://dart.dev/get-dart)

2. Activate Dartion using pub:

```
dart pub global activate dartion
```


(back to top)

## How to Use


### **Commands**


**Upgrade**:

Updates Dartion's version:

```
dartion upgrade
```


**Init server**:

Execute the command below in an empty folder, it will create the base configuration files for your server:

```
dartion init
```


**Start server**:

The command below will boot the server based on the settings configured in the `config.yaml` you have now on your created folder.

```
dartion serve
```

If you want to change those settings, you can edit the `config.yaml` as you like. Refer to the documentation on the init and serve commands, and also the Database class, to know a little bit more about these configurations.


### **Route system**

When running Dartion we have a structure based on RESTful, while the data persists in a JSON file in the folder, named by default `db.json`.

```
GET /products -> Get all products
GET /products/1 -> Get one product
POST /products -> Add more one product
PUT /products/1 -> Edit one product
PATCH /products/1 -> Edit one product
DELETE /products/1 -> Delete one product
```

POST, PUT and PATH requests must have their **body** as JSON. It is not necessary to pass the ID, it is incremented automatically.


### **File Upload**

You can configure Dartion to accept upload files such as images, pdf's, etc...
Adds **storage** properties to config.yaml
```yaml
storage:
name: "file"
folder: storage/
```

File uploads work with "Multipart-form", so you can use the name property to **name** your upload.
We can choose which folder the uploaded files will be on the server using the **folder** property.
Then you will have two reserved routes, one to upload files and the other to retrieve those binaries.
```
POST /storage -> Send files in Multipart-form
GET /file/:your-file.ext -> Retrieve file
```

NOTE: The **/storage** route returns the file name.


### **Authetication**

You can use JWT Authentication in two steps.

1. Use the **auth** property in your `config.yaml`

```yaml
name: Test
port: 3031
db: db.json
statics: public

auth:
key: dajdi3cdj8jw40jv89cj4uybfg9wh9vcnvb
exp: 3600
escape:
- animals
- cities
```

That's enough to protect your routes.
The auth property takes some configuration parameters:

```yaml
key -> To sign your token
exp -> Token expiration time in seconds
escape -> List of routes that will not be affected by token protection
```

2. Login using the **/auth** route:

To retrieve the token you need a credential.
A credential is basically **base64(email:password)**

See an example in Dart:

```dart

String email = "[email protected]";
String password = "123";
String info = "$email:$password";
String encode = base64Encode(info.codeUnits);

String credencials = "Basic $encode";

```

You can now make a GET request to **/auth**, passing the **credentials** in the `authorization` header.

exemple in dart

```dart
// Using the package http

Response response = await http.get(
'http://localhost:3031/auth',
headers: {'authorization': credencials},
);
```

This will return the token and some user information.

```json
{
"user": {
"name": "Jose",
"email": "[email protected]"
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1ODc5NjQ1MTAsImlhdCI6MTU4Nzk2MDkxMCwiaXNzIjoiZGFydGlvIiwic3ViIjoibnVsbCJ9.5AeEIpYeu04fKINg6e8Ic5fpT0-KyZH8yPLOO6HoLVA",
"exp": 3600
}
```

That's it! Now, just use the token to access the routes:

```dart
Response response = await http.get(
'http://localhost:3031/products',
headers: {'authorization': "Bearer $token"},
);
```

#### NOTE:
When using Authentication, you will need to have a **users** property in your **db.json** with a user list containing at least **email** and **password** in order to access.

#### NOTE 2:
The db.json on the root folder of this package was generated by running the tests contained on the `test` folder.


_For more details, please refer to the_ [Documentation](https://pub.dev/documentation/dartion/latest/)

(back to top)

## Features

- ✅ Easy to install and use backend mock server
- ✅ Database personalization through db.json
- ✅ HTTP request handlers
- ✅ AuthService mock
- ✅

Right now this package has concluded all his intended features. If you have any suggestions or find something to report, see below how to contribute to it.

(back to top)

## Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the appropriate tag.
Don't forget to give the project a star! Thanks again!

1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

Remember to include a tag, and to follow [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) and [Semantic Versioning](https://semver.org/) when uploading your commit and/or creating the issue.

(back to top)

## Contact

Flutterando Community
- [Discord](https://discord.gg/qNBDHNARja)
- [Telegram](https://t.me/flutterando)
- [Website](https://www.flutterando.com.br)
- [Youtube Channel](https://www.youtube.com.br/flutterando)
- [Other useful links](https://linktr.ee/flutterando)

(back to top)

## Acknowledgements

Thank you to all the people who contributed to this project, whitout you this project would not be here today.



(back to top)

## Maintaned by







Built and maintained by Flutterando.