This is a sample Sinatra + Sequel + Sinja microservice template application. It's been built to verify feasibility and easiness of such.
It works and it's fast. Rails fast, not Go fast, I'm aware of that.
just a bunch of gems specified in a Gemfile
Documentation for gems for lazy ones:
fairly simple. Demo uses Sqlite3 file database which is created and initialized on start if necessary. So, no worries at all (-;
There are at least two option. Manually:
cd demo_service
bundle # install necessary gems
rackup # start da app
You can also use docker to containerize our app and run it. To do that first build an image:
cd demo_service
docker build --force-rm --no-cache -t demo_service:0.0.1 .
after few (hundred) seconds our image is ready to use. Now it's time to run it:
cd demo_service
docker run -d --name demo_service -p9292:9292 demo_service:0.0.1
There is a chance it's working so we could now try to add new user. Please notice we have to use a JSONAPI format:
curl -X POST \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
-d '{"data":{"type":"users", "attributes":{ "email":"new@email.com", "name": "some new email"}}}' \
http://localhost:9292/users
let's query for all the users:
curl -X GET \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
http://localhost:9292/users
and for particularly interesting one:
curl -X GET \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
http://localhost:9292/users/1
you should get a JSONAPI format response, similar to this:
{
"data": {
"type": "users",
"id": "46",
"attributes": {
"id": 46,
"name": "some new email",
"email": "new@email.com"
},
"links": {
"self": "/users/46"
}
},
"jsonapi": {
"version": "1.0"
},
"included": [
]
}
Have fun. It's very, very simple application made in minutes to check if and how well Sinatra + Sequel + Sinja performs.
For me it's a great combination and definitely worth considering for small code pieces like specialized microservice. Sinatra is amazing, every Rubyist knows that, right? Sinja seems to be very powerful and makes API implementation very easy.
Any comments as well as constructive critics is very welcome.