6.0.1 • Published 6 months ago

flora v6.0.1

Weekly downloads
5
License
MIT
Repository
github
Last release
6 months ago

Flora

npm.io NPM version NPM downloads

Flora is a FLexible Open Rest API framework for Node.js.

Flora requires Node.js v14 or higher.

Features

  • Resources in resources (recursive): fetch as much as possible in one request, without duplicating code
  • Lightweight (but powerful) field/sub-resource selection syntax: fetch exactly what you need in one request
  • Filter resources even by sub-resource-attributes: resolve inside database when possible, or return ID lists
  • Pluggable data sources: currently implemented: MySQL, MongoDB, Elasticsearch, Solr/Lucene
  • Combine multiple data sources: even on per-row-basis - "API-side-JOIN"
  • Highly optimized database queries: internal SQL parser to remove unselected fields and thus unreferenced LEFT JOINs
  • Locale: parameterize JOINs i.e. with a localeId - no need for database views which can't be parameterized
  • Handle all your special cases as good as possible: hooks and events for extending features

Server features

  • Node.js HTTP-Server and Cluster based implementation with self-monitoring process-management
  • Extremely verbose server-status - see everytime what the server is doing and what is hanging around in production
  • Straightforward logging/error handling - i.e. forward all errors to your favorite "error-monitoring-tool"
  • Updates in production with zero downtime - almost every part of code and config is replaceable without shutdown
  • Comfortable development-features - usual "code-change - F5 - see result"-workflow

Design goals

  • Generic implementation just for reading - offer helper for writing
  • Easy abstraction of complex and distributed database structures
  • Easy standard cases with minimal boilerplate code - special cases possible - "everywhere"
  • Flexibility, stability, performance, simplicity, transparency

Documentation

Examples

URL structure

Format

/path/to/resource/<id>
    ?action=<action>
    &select=xxx
    &filter=xxx
    &limit=10
    &page=1
    &width=100 (additional parameters)
    &height=100

Example URLs

  • GET /article/123 (retrieve article 123 as JSON)
  • GET /article/ (list of all articles)

Resource implementation

module.exports = (api) => ({
    actions: {
        retrieve: (request, response) => {
            return api.resourceProcessor.handle(request, response)
        },

        hello: () => {
            return Promise.resolve("Hello World");
            // return "Hello World"
            // Also, a Stream of Buffer can be returned
        },

        foo: {
            default: (request, response) => {
                // If "foo" was a function, only the default format was allowed.
                // This way you can define additional formats:
            },
            image: (request, response) => {
                // This is executed when /myresource/123.image?action=foo is called.
                // The behaviour of each format is not dictated by the framework.
                response.header('Content-Type', 'image/png');
                return … // Stream or Buffer
            }
        }
    }
});

Abstract definition

<?xml version="1.0" encoding="utf-8"?>
<resource primaryKey="id" xmlns:flora="urn:flora:options">
    <flora:dataSource type="mysql" database="contents" table="user"/>
    <id type="int"/>
    <firstname/>
    <lastname/>
</resource>

License

MIT

6.0.1

6 months ago

5.3.0

9 months ago

5.2.0

10 months ago

6.0.0

9 months ago

5.1.1

1 year ago

5.1.0

1 year ago

5.0.0

2 years ago

4.0.0

2 years ago

3.1.0

2 years ago

3.0.0

3 years ago

2.0.13

3 years ago

2.0.11

3 years ago

2.0.12

3 years ago

2.0.10

3 years ago

2.0.9

3 years ago

2.0.8

3 years ago

2.0.7

4 years ago

2.0.6

4 years ago

2.0.5

4 years ago

2.0.4

4 years ago

2.0.3

4 years ago

2.0.2

5 years ago

2.0.1

5 years ago

2.0.0

5 years ago

2.0.0-alpha.19

5 years ago

2.0.0-alpha.18

5 years ago

2.0.0-alpha.17

5 years ago

2.0.0-alpha.16

5 years ago

2.0.0-alpha.15

5 years ago

2.0.0-alpha.14

5 years ago

2.0.0-alpha.13

5 years ago

2.0.0-alpha.12

5 years ago

2.0.0-alpha.11

5 years ago

2.0.0-alpha.10

5 years ago

2.0.0-alpha.9

5 years ago

2.0.0-alpha.8

5 years ago

2.0.0-alpha.7

5 years ago

2.0.0-alpha.6

5 years ago

2.0.0-alpha.5

5 years ago

2.0.0-alpha.4

5 years ago

2.0.0-alpha.3

5 years ago

2.0.0-alpha.2

5 years ago

2.0.0-alpha.1

5 years ago

0.9.0

6 years ago

0.8.11

6 years ago

0.8.10

6 years ago

0.8.9

6 years ago

0.8.8

6 years ago

0.8.7

6 years ago

0.8.6

6 years ago

0.8.5

6 years ago

0.8.4

6 years ago

0.8.3

7 years ago

0.8.2

7 years ago

0.8.1

7 years ago

0.8.0

7 years ago

0.7.5

7 years ago

0.7.4

7 years ago

0.7.2

7 years ago

0.7.1

7 years ago

0.7.0

7 years ago

0.6.3

8 years ago

0.6.2

8 years ago

0.6.1

8 years ago

0.6.0

8 years ago

0.3.8

8 years ago

0.3.7

8 years ago

0.3.6

8 years ago

0.3.5

8 years ago

0.3.4

8 years ago

0.3.3

8 years ago

0.3.2

9 years ago

0.3.1

9 years ago

0.3.0

9 years ago

0.2.0

9 years ago

0.0.1

10 years ago

0.0.0

10 years ago