Noty backend REST API is built with Ktor framework with PostgreSQL as database and deployed on the Heroku.
Currently this API is deployed on https://noty-api.herokuapp.com/notes
. You can try it 😃.
📄 Visit the documentation of this project to get more information in detail.
- Easy structure
- Authentication
- Automatic and easy deployment to Heroku
- Test cases
This project has two modules as following:
data
: Data source and operations.application
: Ktor application entry point and API routes.
You will require latest stable version of JetBrains IntelliJ Idea to build and run the server application.
- Import this project in IntelliJ Idea
- Build the project.
- Set environment variables for the
:application:run
configuration as following
SECRET_KEY=ANY_RANDOM_SECRET
DATABASE_NAME=noty_db
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USER=postgres
DATABASE_PASSWORD=postgres
Replace database credentials with your local config.
- Run command
./gradlew :application:run
. - Hit
http://localhost:8080
and API will be live🔥. - You can find sample HTTP requests here and can directly send requests from IntelliJ itself.
- Ktor - Ktor is an asynchronous framework for creating microservices, web applications, and more. It’s fun, free, and open source.
- Exposed - An ORM/SQL framework for Kotlin.
- PostgreSQL JDBC Driver - JDBC Database driver for PostgreSQL.
- Testcontainer - Testcontainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
- Kotest - Kotest is a flexible and comprehensive testing project for Kotlin with multiplatform support.
You can navigate to /http
and try API calls in IntelliJ Idea IDE itself after API is running.
POST http://localhost:8080/auth/register
Content-Type: application/json
{
"username": "test12345",
"password": "12346789"
}
POST http://localhost:8080/auth/login
Content-Type: application/json
{
"username": "test12345",
"password": "12346789"
}
GET http://localhost:8080/notes
Content-Type: application/json
Authorization: Bearer YOUR_AUTH_TOKEN
POST http://localhost:8080/note/new
Content-Type: application/json
Authorization: Bearer YOUR_AUTH_TOKEN
{
"title": "Hey there! This is title",
"note": "Write note here..."
}
PUT http://localhost:8080/note/NOTE_ID_HERE
Content-Type: application/json
Authorization: Bearer YOUR_AUTH_TOKEN
{
"title": "Updated title!",
"note": "Updated body here..."
}
DELETE http://localhost:8080/note/NOTE_ID_HERE
Content-Type: application/json
Authorization: Bearer YOUR_AUTH_TOKEN