Express REST API example
 
Go to file
Raphael Cerveaux 7f6c442d39
Merge pull request #1 from sundowndev/develop
v1.0.0-rc1 release
2018-11-16 10:35:42 +01:00
app Routes entry point 2018-11-15 19:28:33 +01:00
config JWT secret 2018-11-15 19:29:35 +01:00
docs API Docs 2018-11-15 19:28:51 +01:00
.eslintignore Install eslint 2018-11-13 11:15:47 +01:00
.eslintrc.json Install eslint 2018-11-13 11:15:47 +01:00
.gitignore gitignore 2018-11-12 16:26:33 +01:00
.travis.yml Travis config 2018-11-13 18:46:36 +01:00
README.md [Docs] jwt token 2018-11-15 19:26:06 +01:00
index.js Error handler 2018-11-15 19:29:12 +01:00
package-lock.json Install Joi package 2018-11-13 18:49:39 +01:00
package.json Test script 2018-11-14 18:16:16 +01:00
todo.md To do list 2018-11-15 19:29:22 +01:00

README.md

API node

RESTful API based on Expressjs. Build status

WARNING: This is for demo purposes. You should not run this in production (no cors, unit tests ...).

Features

  • Sign up/sign in (JWT, bcrypt)
  • Create, update, delete, read your notes
  • Manage your account: update, delete

Call the API

As best practice, use these headers to make requests to the API:

Content-Type:application/x-www-form-urlencoded
Accept:application/json

When signed in, you must provide the access token:

Authorization: <Access_token>

API response

The response code will never be in the response.

Make operations (create, update, delete ...)

Validation error example:

{
    "success": false,
    "message": "Form is invalid.",
    "errors": [
        {
            "message": "\"password\" is required",
            "path": [
                "password"
            ],
            "type": "any.required",
            "context": {
                "key": "password",
                "label": "password"
            }
        }
    ]
}

Getting objects (read)

{
    "_id": "5bec2fed257ab94172cd3874",
    "firstname": "Raphael",
    "lastname": "NA",
    "username": "sundown",
    "createdAt": "2018-11-14T14:23:41.581Z",
    "updatedAt": "2018-11-14T14:23:41.581Z",
    "__v": 0
}

Specs

Pourvoir s'inscrire, se connecter, réinitialiser mot de passe (non connecté) :

  • POST /auth/register (firstname, lastname, email, password) (201 created)
  • POST /auth/login (email, password) (200 ok avec en body le user et en header le token d'authentification)
  • POST /auth/rester-password (email) (optionnel si tu te sens pas chaud) (200 ok)

Pouvoir voir / modifier / supprimer son profil (connecté):

  • PUT /user/me (tous les champs sauf password) (200 ok avec en body le user après édition)
  • PUT /user/me (si tu vois password et new password, ou mets une autre route si tu veux) (200 ok avec le user après édition mais sans mot de passe bien sûr)
  • DELETE /users/me (supprimer le profil) (204 no content, car le user est supprimé et tu ne me renvoi rien)
  • GET /users/me (renvoi le user) (200 ok avec en body le user) pouvoir gérer les notes (connecté)

Notes:

  • POST /notes (title optionnel, text optionnel, lié a user connecté) (201 creatred)
  • PUT /notes/id (title optionnel, text optionnel) (200 ok avec en body la noté modifiée)
  • DELETE /notes/id (supprimer la note) (204 no content)
  • GET /user/me/ notes (toutes notes du user connecté)
  • GET /notes/id (get la note de cet id si elle appartient au user connecté)

Finito ! C'est un crud avec un minimum de vérif qui sont :

  • Est-ce que le user est connecté ou non
  • Est-ce que le user est propriétaire de la ressource qu'il modifie ou supprime

C'est tout ce qu'il y a besoin de vérifier.

Pour tout ce qui est erreur il n'y a que 4 règles à respecter :

  • Pas le droit car pas connecté : 401
  • Pas le droit car connecté mais ne t'appartient pas : 403
  • Ressource n'existe pas : 404
  • Erreur de validation (si tu veux en faire) : 400 bad request