Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/onfranciis/linkly-rs
A url shortener server built with Rust, PostgreSQL and Redis on Rocket - Bitly alternative
https://github.com/onfranciis/linkly-rs
bitly learn linkly-rs postgresql redis rocket rust sql student-vscode
Last synced: 2 months ago
JSON representation
A url shortener server built with Rust, PostgreSQL and Redis on Rocket - Bitly alternative
- Host: GitHub
- URL: https://github.com/onfranciis/linkly-rs
- Owner: onfranciis
- License: gpl-3.0
- Created: 2024-04-03T03:10:11.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2024-09-14T15:16:43.000Z (3 months ago)
- Last Synced: 2024-09-27T07:21:12.446Z (3 months ago)
- Topics: bitly, learn, linkly-rs, postgresql, redis, rocket, rust, sql, student-vscode
- Language: Rust
- Homepage:
- Size: 96.7 KB
- Stars: 8
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: COPYING.txt
Awesome Lists containing this project
README
# Linkly RS
### Bitly, but on rust
Linkly RS is a url shortner service built on Rust using the [Rocket](https://rocket.rs/) web server framework, Redis and PostgreSQL database. It's easy to host, just have the [rust tool chain](https://www.rust-lang.org/tools/install) installed on your system and an env file with the configuration below.
```bash
ROCKET_PORT=1234
REDIS_URL=redis://
DATABASE_URL=postgres://:@/linkly_rs# NOTE
# - There must always be DATABASE_URL because that's what sqlx uses to query macros online
# - You MIGHT run into docker issues if your env file has space and/or quotes```
Now, in your directory, run
```bash
$ cargo run
```## API
This service offers 4 end points
- **GET** /
This is a health check end point.
**_Response_**
```json
// OK - 200
{
"connected": true
}
```
- **POST** /url
Add new url
**_Body_**
```json
// x-www-form-urlencoded
{
"url": "onfranciis.dev"
}
```
**_Response_**
```json
// OK - 200
{
"result": {
"id": 5,
"long": "http://onfranciis.dev",
"short": "a4f8",
"date": "05 Jun-2024 06:58:00am +0100"
},
"err": null
}
``````json
// Conflict - 409
{
"result": null,
"err": "Seems like this url has already been shortened! Is it 'a4f8' ?"
}
```
- **GET** /url/{id}
Redirect if successful
**_Response_**
```json
// Not Found - 404
{
"result": null,
"err": "This url is invalid! Kindly confirm"
}
```- **GET** /url
Return all urls
**_Response_**
```json
// OK - 200
{
"result": [
{
"id": 3,
"long": "http://google.com",
"short": "00a5",
"date": "02 Jun-2024 13:40:56pm +0100"
},
{
"id": 5,
"long": "http://onfranciis.dev",
"short": "a4f8",
"date": "05 Jun-2024 06:58:00am +0100"
},
{
"id": 6,
"long": "http://test.com",
"short": "e423",
"date": "05 Jun-2024 07:06:43am +0100"
}
],
"err": null
}
```
![Rust](https://img.shields.io/badge/rust-%23000000.svg?style=for-the-badge&logo=rust&logoColor=white) ![Postgres](https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge&logo=postgresql&logoColor=white) ![Linux](https://img.shields.io/badge/Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black) ![VS Code Insiders](https://img.shields.io/badge/VS%20Code%20Insiders-35b393.svg?style=for-the-badge&logo=visual-studio-code&logoColor=white) ![Redis](https://img.shields.io/badge/redis-%23DD0031.svg?style=for-the-badge&logo=redis&logoColor=white)
For support and enquiries, reach out via [[email protected]](mailto:[email protected])