Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zmts/supra-api-nodejs
❤️ Node.js REST API boilerplate
https://github.com/zmts/supra-api-nodejs
access-token api architecture cookies express-boilerplate framework-agnostic jwt nodejs nodejs-api objectionjs postgresql refresh-token restful sql starter-kit tests
Last synced: 3 months ago
JSON representation
❤️ Node.js REST API boilerplate
- Host: GitHub
- URL: https://github.com/zmts/supra-api-nodejs
- Owner: zmts
- License: mit
- Created: 2017-10-15T16:20:52.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-03-04T05:51:35.000Z (almost 2 years ago)
- Last Synced: 2024-08-02T05:05:45.521Z (6 months ago)
- Topics: access-token, api, architecture, cookies, express-boilerplate, framework-agnostic, jwt, nodejs, nodejs-api, objectionjs, postgresql, refresh-token, restful, sql, starter-kit, tests
- Language: JavaScript
- Homepage:
- Size: 5 MB
- Stars: 326
- Watchers: 19
- Forks: 87
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Node.js API boilerplate
Piece of my thoughts about Node.js architecture.
[supra-api-nodejs: A little bit about Node.js RESTful APIs Architecture (RU)](https://gist.github.com/zmts/6ac57301e2e8e8e9e059e9c087732c05)
## Highlights:
- Modular RESTful API
- ES6 Classes
- Action based
- SQL based (PostgreSQL with objection.js)
- Migrations(knex.js)
- Auth (JWT/Access-token/Refresh-token)
- Cookie support
- Role based access control
- Request validation
- CRUD(users, posts resources)
- Automated API documentation
- Full authentication/authorization and user registration flow implemented
- Tests(e2e)## Key points:
### 0. Monolith first
Supra-api-nodejs its about monolith first approach. But this does not prevent you from using it in a microservice architecture as well.### 1. Controller layer
Each entity have own controller class it slim layer representing resource mapping(routing)
```
class PostsController extends BaseController {
static get router () {
router.get('/', this.actionRunner(actions.ListAction))
router.get('/:id', this.actionRunner(actions.GetByIdAction))
router.post('/', this.actionRunner(actions.CreateAction))
router.patch('/:id', this.actionRunner(actions.UpdateAction))
router.delete('/:id', this.actionRunner(actions.RemoveAction))return router
}
}
```
For example `PostsController` implements `post` entity routes. Each route fires own `action`.### 2. Action layer
It's a class encapsulated request validation, permission verification and business logic. One file, one class, one REST operation, one use case.### 3. DAO layer
Implement data access methods.### 4. Model layer
Represent models schemas and validation rules. There is no other logic __only model fields and validation rules__.
## Development:### Install global dependencies:
```
npm i -g knex nodemon
```
### Setup database:
1. Install PostgreSQL (https://postgresapp.com/downloads.html (for Mac OS))
2. Create some DB (https://eggerapps.at/postico/ (for Mac OS))### Go ahead...
```
cd /supra-api-nodejs
```
- `cp .env.example .env`
- Set required credential in `.env`Run migration to set base SQL schema
```
knex migrate:latest
```Run server
```
npm run start // prod mode
npm run dev // dev mode
```### Implemented endpoints:
#### /auth
Path | Method | Description
---|---|---
/auth/login | POST | LoginAction
/auth/logout | POST | LogoutAction
/auth/refresh-tokens | POST | RefreshTokensAction#### /users
Path | Method | Description
---|---|---
/users | GET | ListUsersAction
/users/current | GET | GetCurrentUserAction
/users/:id | GET | GetUserByIdAction
/users | POST | CreateUserAction
/users | PATCH | UpdateUserAction
/users/:id | DELETE | RemoveUserAction
/users/change-password | POST | ChangePasswordAction
/users/send-reset-password-email | POST | SendResetPasswordEmailAction
/users/reset-password | POST | ResetPasswordAction
/users/confirm-registration | POST | ConfirmRegistrationAction
/users/change-email | POST | ChangeEmailAction
/users/confirm-email | POST | ConfirmEmailAction
/users/resend-confirm-new-email-token | POST | ResendConfirmNewEmailTokenAction
/users/cancel-email-changing | POST | CancelEmailChangingAction#### /posts
Path | Method | Description
---|---|---
/posts | GET | ListPostsAction
/posts | POST | CreatePostAction
/posts/:id | GET | GetPostByIdAction
/posts/:id | PATCH | UpdatePostAction
/posts/:id | DELETE | RemovePostAction__!!! Project still in progress !!!__
_2017 - 2018 - 2019 - 2020 ..._