Noty backend REST API is built with Ktor framework with PostgreSQL as database and deployed on the Railway.
Currently this API is deployed on _https://notykt-production.up.railway.app
. You can try it 😃.
📄 Visit the documentation of this project to get more information in detail.
- Easy structure
- Authentication
- Automatic and easy deployment to Railway.app
- 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
Refer to the .env
file for example of environment variables.
SECRET_KEY=ANY_RANDOM_SECRET_VALUE
PGPORT=5432
PGHOST=localhost
PGDATABASE=notykt_dev_db
PGUSER=postgres
PGPASSWORD=postgres
DATABASE_DRIVER=org.postgresql.ds.PGSimpleDataSource
DATABASE_MAX_POOL_SIZE=10
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