Need help with para?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

Erudika
388 Stars 107 Forks Apache License 2.0 1.5K Commits 3 Opened issues

Description

Open source back-end server for web, mobile and IoT. The backend for busy developers. (self-hosted or hosted)

Services available

!
?

Need anything else?

Contributors list

Logo

A scalable, multitenant backend for the cloud.

Build Status Quality Gate Status Maven Central Join the chat at https://gitter.im/Erudika/para

Para is a scalable, multitenant backend server/framework for object persistence and retrieval. It helps you build and prototype applications faster by taking care of backend operations. It can be a part of your JVM-based application or it can be deployed as standalone, multitenant API server with multiple applications and clients connecting to it.

The name "pára" means "steam" in Bulgarian. And just like steam is used to power stuff, you can use Para to power your mobile or web application backend.

See how Para compares to other open source backend frameworks.

This project is fully funded and supported by Erudika - an independent, bootstrapped company.

Features

  • RESTful JSON API secured with Amazon's Signature V4 algorithm
  • Database-agnostic, designed for scalable data stores (DynamoDB, Cassandra, MongoDB, etc.)
  • Full-text search (Lucene, Elasticsearch)
  • Distributed and local object cache (Hazelcast, Caffeine)
  • Multitenancy - each app has its own table, index and cache
  • Webhooks with signed payloads
  • IoT support and integration with AWS and Azure
  • Flexible security based on Spring Security (LDAP, SAML, social login, CSRF protection, etc.)
  • Stateless client authentication with JSON Web Tokens (JWT)
  • Simple but effective resource permissions for client access control
  • Robust constraint validation mechanism based on JSR-303 and Hibernate Validator
  • Per-object control of persistence, index and cache operations
  • Support for optimistic locking and transactions (implemented by each
    DAO
    natively)
  • Advanced serialization and deserialization capabilities (Jackson)
  • Full metrics for monitoring and diagnostics (Dropwizard)
  • Modular design powered by Google Guice and support for plugins
  • I18n utilities for translating language packs and working with currencies
  • Standalone executable JAR with embedded Jetty
  • Para Web Console - admin user interface

Architecture

+----------------------------------------------------------+
|                  ____  ___ _ ____ ___ _                  |
|                 / __ \/ __` / ___/ __` /                 |
|                / /_/ / /_/ / /  / /_/ /                  |
|               / .___/\__,_/_/   \__,_/     +-------------+
|              /_/                           | Persistence |
+-------------------+  +-----------------+   +-------------+
|      REST API     |  |     Search      |---|    Cache    |
+---------+---------+--+--------+--------+---+------+------+
          |                     |                   |
+---------+---------+  +--------+--------+   +------+------+
|  Signed Requests  |  |  Search Index   |   |  Data Store |
|  and JWT Tokens   |  |      (Any)      |   |    (Any)    |
+----+---------^----+  +-----------------+   +-------------+
     |         |
+----v---------+-------------------------------------------+
|  Clients : JavaScript, PHP, Java, C#, Android, iOS, etc. |
+----------------------------------------------------------+

Documentation

Read the Docs

Blog

Read more about Para on our blog

Hosting

We offer hosting and premium support at paraio.com where you can try Para online with a free developer account. Browse and manage your users and objects, do backups and edit permissions with a few clicks in the web console. By upgrading to a premium account you will be able to scale you projects up and down in seconds and manage multiple apps.

Quick Start

Create a configuration file

application.conf
file in the same directory as the Para package. Here's an example default configuration: ```ini

the name of the root app

para.app_name = "Para"

or set it to 'production'

para.env = "embedded"

if true, users can be created without verifying their emails

para.security.allowunverifiedemails = false

if hosting multiple apps on Para, set this to false

para.clientscanaccessrootapp = true

if false caching is disabled

para.cache_enabled = true

root app secret, used for token generation, should be a random string

para.appsecretkey = "b8db69a24a43f2ce134909f164a45263"

enable API request signature verification

para.security.api_security = true

the node number from 1 to 1024, used for distributed ID generation

para.worker_id = 1 ```

  1. Download the latest executable JAR
  2. Execute it with
    java -jar -Dconfig.file=./application.conf para-*.jar
  3. Call
    curl localhost:8080/v1/_setup
    to get the access and secret keys for the root app (required)
  4. Install
    para-cli
    tool for easy access
    npm install -g para-cli
    (optional)
  5. Create a new "child" app for regular use (optional):
    # run setup and set endpoint to either 'http://localhost:8080' or 'https://paraio.com'
    $ para-cli setup
    $ para-cli new-app "myapp" --name "My App"
    
  6. Open Para Web Console or integrate with one of the API clients below.

The quickest way to interact with Para is through the command-line tool (CLI):

$ npm install -g para-cli
$ para-cli setup
$ para-cli ping
$ echo "{\"type\":\"todo\", \"name\": \"buy milk\"}" > todo.json
$ para-cli create todo.json --id todo1 --encodeId false
$ para-cli read --id todo1
$ para-cli search "type:todo"

Docker

Tagged Docker images for Para are located at

erudikaltd/para
on Docker Hub. It's highly recommended that you pull only release images like
:1.39.0
or
:latest_stable
because the
:latest
tag can be broken or unstable.
First, create an
application.conf
file in a directory and run this command:
$ docker run -ti -p 8080:8080 --rm -v para-data:/para/data \
  -v $(pwd)/application.conf:/para/application.conf \
  -e JAVA_OPTS="-Dconfig.file=/para/application.conf -Dloader.path=lib" erudikaltd/para:latest_stable

Environment variables

JAVA_OPTS
- Java system properties, e.g.
-Dpara.port=8000
BOOT_SLEEP
- Startup delay, in seconds

Plugins

To use plugins, create a new

Dockerfile-plugins
which does a multi-stage build like so: ```

change X.Y.Z to the version you want to use

FROM erudikaltd/para:v1.XY.Z-base AS base FROM erudikaltd/para-search-lucene:1.XY.Z AS search FROM erudikaltd/para-dao-mongodb:1.XY.Z AS dao FROM base AS final COPY --from=search /para/lib/.jar /para/lib COPY --from=dao /para/lib/.jar /para/lib ```

Then simply run

$ docker build -f Dockerfile-plugins -t para-mongo .

Building Para

Para can be compiled with JDK 8+:

To compile it you'll need Maven. Once you have it, just clone and build:

$ git clone https://github.com/erudika/para.git && cd para
$ mvn install -DskipTests=true

To generate the executable "fat-jar" run

$ mvn package
and it will be in
./para-jar/target/para-x.y.z-SNAPSHOT.jar
. Two JAR files will be generated in total - the fat one is a bit bigger in size.

To build the base package without plugins (excludes

para-dao-sql
and
para-search-lucene
), run:
$ cd para-jar && mvn -Pbase package

To run a local instance of Para for development, use:

sh
$ mvn -Dconfig.file=./application.conf spring-boot:run

Standalone server

You can run Para as a standalone server by downloading the executable JAR and then:

$ java -jar para-X.Y.Z.jar

The you can browse your objects through the Para Web Console console.paraio.org. Simply change the API endpoint to be your local server and connect your access keys. The admin interface is client-side only and your secret key is never sent over the the network. Instead, a JWT access token is generated locally and sent to the server on each request.

Alternatively, you can build a WAR file and deploy it to your favorite servlet container:

$ cd para-war && mvn package

Download JAR

Maven dependency

You can also integrate Para with your project by adding it as a dependency. Para is hosted on Maven Central. Here's the Maven snippet to include in your

pom.xml
:
  com.erudika
  para-server
  {see_green_version_badge_above}

For building lightweight client-only applications connecting to Para, include only the client module:

xml

  com.erudika
  para-client
  {see_green_version_badge_above}

Command-line tool

$ npm install -g para-cli

API clients

Use these client libraries to quickly integrate Para into your project:

Database integrations

Use these

DAO
implementations to connect to different databases:
  • DynamoDB:
    AWSDynamoDAO
    (included in
    para-server
    )
  • MongoDB: para-dao-mongodb
  • Cassandra: para-dao-cassandra
  • SQL (H2/MySQL/SQL Server/PostgreSQL, etc.): para-dao-sql
    H2DAO
    is the default
    DAO
    and it's part of the SQL plugin (packaged with the JAR file)

Search engine integrations

The

Search
interface is implemented by:

Cache integrations

The

Cache
interface is implemented by:
  • Caffeine: default objects are cached locally (included in
    para-server
    )
  • Hazelcast: para-cache-hazelcast (distributed)

Queue implementations

The

Queue
interface is implemented by:
  • AWS SQS: in the
    AWSQueue
    class
  • LocalQueue
    for single-host deployments and local development

Projects using Para

Wishlist / Roadmap

  • Para
    2.0
    - migration to Quarkus, Java 13+ only, native image
  • GraphQL support

Getting help

  • Have a question? - ask it on Gitter
  • Found a bug? - submit a bug report here
  • Ask a question on Stack Overflow using the
    para
    tag
  • For questions related to Scoold, use the
    para
    tag on Stack Overflow

Contributing

  1. Fork this repository and clone the fork to your machine
  2. Create a branch (
    git checkout -b my-new-feature
    )
  3. Implement a new feature or fix a bug and add some tests
  4. Commit your changes (
    git commit -am 'Added a new feature'
    )
  5. Push the branch to your fork on GitHub (
    git push origin my-new-feature
    )
  6. Create new Pull Request from your fork

Please try to respect the code style of this project. To check your code, run it through the style checker:

mvn validate

For more information see CONTRIBUTING.md

License

Apache 2.0

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.