This repository has examples showing build a simple REST API server using ORMs on top of YugabyteDB (using the YSQL API). The scenario modelled is that of a simple online e-commerce store. It consists of the following.
- The users of the ecommerce site are stored in the
users
table. - The
products
table contains a list of products the ecommerce site sells. - The orders placed by the users are populated in the
orders
table. An order can consist of multiple line items, each of these are inserted in theorderline
table.
You should first install YugabyteDB, which is a distributed SQL database compatible with the PostgreSQL language.
The same REST APIs are implemented using various ORMs. Each of these is present in one of the sub-directories in this repo. For example, to start the REST API server using Spring
, simply go to the appropriate directory and follow the instructions there.
By default, the REST API server listens on localhost
port 8080
.
Directory | ORM |
---|---|
Java - Spring | Spring Data JPA (uses Hibernate internally) |
Core Java - Hibernate | Core Java - Hibernate Example |
Java - Mybatis | Java - Mybatis Example |
Scala - Play | Play Framework Example |
Golang - Gorm | Gorm |
NodeJS - Sequelize | Sequelize |
Python - SQLAlchemy | SQL Alchemy |
Python - django | Django |
Ruby on Rails - ActiveRecord | ActiveRecord |
Rust - Diesel | Rust Diesel |
C# - Dapper | Dapper |
Php - Laravel | Php Laravel |
You can create a user named John Smith
and email jsmith@example.com
as follows:
$ curl --data '{ "firstName" : "John", "lastName" : "Smith", "email" : "jsmith@example.com" }' \
-v -X POST -H 'Content-Type:application/json' http://localhost:8080/users
This will return the inserted record as a JSON document:
{
"userId": "1",
"firstName": "John",
"lastName": "Smith",
"email": "jsmith@example.com"
}
You can connect to YugabyteDB using psql
and select these records:
postgres=# select * from users;
user_id | first_name | last_name | user_email
---------+------------+-----------+---------------
1 | John | Smith | jsmith@example.com(1 row)
You can list the current set of users by running the following:
$ curl http://localhost:8080/users
You should see the following output:
{
"content": [
{
"userId":"1",
"email":"jsmith@example.com",
"firstName":"John",
"lastName":"Smith"
}
],
...
}
You can create a product listing as follows:
$ curl \
--data '{ "productName": "Notebook", "description": "200 page notebook", "price": 7.50 }' \
-v -X POST -H 'Content-Type:application/json' http://localhost:8080/products
You should see the following return value:
{
"productId": "1",
"productName": "Notebook",
"description": "200 page, hardbound, blank notebook",
"price": 7.5}
You can do this as follows:
$ curl http://localhost:8080/products
You should see an output as follows:
{
"content":[
{
"productId": "1",
"productName": "Notebook","description":"200 page, hardbound, blank notebook",
"price": 7.5
}
],
...
}
Creating an order involves a user id ordering a particular product, this can be achieved as follows:
$ curl \
--data '{ "userId": "1", "products": [ { "productId": 1, "units": 2 } ] }' \
-v -X POST -H 'Content-Type:application/json' http://localhost:8080/orders
You should see the following return value:
TBD
Note that you can check out multiple products in one order. As an example, the following POST payload makes one user (id=1) checkout two products (id=1 and id=2) by creating the following payload:
{ "userId": "1", "products": [ { "productId": 1, "units": 2 }, { "productId": 2, "units": 4 } ] }