naskot/api-naskot-maker

framework for creating APIs

dev-stable 2020-10-12 13:53 UTC

This package is auto-updated.

Last update: 2024-04-12 21:26:43 UTC


README

📦 Framework API Rest pour PHP7, conçu pour être simple d’utilisation, pour un développement rapide.

C’est un projet libre, contributeurs vous êtes les bienvenues.

Permet d’être utiliser facilement sur un serveur apache2 ou nginx avec un minimum de connaissance.

compatible avec les sites web, web app / mobile app ou nimporte quel plugins AJAX ou Axios.

Projet initial https://gitlab.com/juliennaskot/api-rest-php (privé) présenté pour l'obtention d'un titre professionnel au Greta de Nice.

Le projet est une API Rest écrit avec PHP7 et fonctionnant avec une base de données MySQL.

Le point fort de ce projet est dans sa conception en framework, modifiable et libre, il a pour objectif d’être simplifié, évolutif et restera libre.

Vous pouvez m'aider à l'améliorer, l'utiliser dans vos projets personnels ou professionnels.

📝 L’objectif de ce projet est de pouvoir développer rapidement une API répondant aux exigences suivantes :

• Sécurité, nous utiliserons ce qui se fait de mieux en matière de sécurité(

Enregistrement des mots de passe hashé selon l’algorithme de votre choix(Par défaut sha256) avec en supplément un passe de hashage afin de rendre très difficile la conversion des mots de passe stockés en base de données. Un jeton en 3 parties ( Header, Payload, Signature ) connu sous le nom de JsonWebToken (JWT), afin de se moderniser avec les technologies actuelles et de lutter contre les attaques CSRF ( pour Cross Site Request Forgery ), un module supplémentaire rend encore plus difficile la découverte de ce jeton par une clé supplémentaire que seul le client peut connaître lors de la première communication avec l’API.

• Gestion des données.

• Un ensemble de method static accessible dans n’importe quel Class prédéfini comme par exemple:

REQ_DATA() qui permet la récupération des données cumulé à un nettoyage automatique des données en formulaire (*à partir de la v1.3b) désactivable en argument si besoin.

getMyId() qui permet de retourner l’ID du jeton contenu dans le JsonWebToken du client.

• Vérification des champs de formulaire, voir (REQ_DATA()).

• Conception orienté objet.

• Chaque Class est conçu en Singleton.

• Peut appeler des librairies personnalisé.

• Contient des librairies déjà préexistantes.

• Un chargeur de Class donc inutile d’utiliser un require ou include, par ailleurs elle s’instancie automatiquement si elle est conçu dans un controller avec 2 méthod requises à savoir.

instance_modular_singleton() pour instancier la class automatiquement en Singleton.

router() afin de recueillir les requêtes clientes de type URN pour nom uniforme de ressource ( *voir documentation rfc.2141 ).

📝 Un template de base est proposé sous cette forme :

class ControllerCustomExample
{
    /**
     * Pour de l'heritage multiple, plus fléxible que les namespace
     * chaque librairie peut etre stocké dans le dossier /mixins/
     */
    use customLibrairie1, otherCustomLibrarie2, customLibrarie3;

    private static $instance;
    private function __construct()
    {
        $this->pdo_db = ApiDatabase::__instance_singleton()->pdo_useDB();
        $this->require_table();
    }
    /**
     * Instancie directement dans la Class static
     * peut etre utilisé comme un constructeur,
     * la Class ne peut s'instancier autrement que par cette method static
     * etant donné que le constructeur est en privé
     */
    public static function __instance_modular_singleton()
    {
        if (!isset(self::$instance)) {
            self::$instance = new self;
        }
        self::$instance->router(); // Au moment d'instancier on charge le router
        return self::$instance;
    }
    /**
     * Type SETTER
     * Création de la table
     * no return
     */
    private function require_table()
    {
        $prefix = Config::Database()['prefix'];
        $this->pdo_db->exec("
            START TRANSACTION;

            CREATE TABLE IF NOT EXISTS `" . $prefix . "example` (
                `id` int(11) NOT NULL AUTO_INCREMENT,
                PRIMARY KEY (`id`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

            COMMIT;
        ");
    }
    /**
     * Verifie si une URN est présente
     * comme identifiant de ressource en meme temps que la REQUEST_METHOD
     */
    private function router()
    {
        switch ($_SERVER['REQUEST_METHOD']) {
            case 'GET': // Lecture de données
                if (ApiMisc::isRouteUsed('show/me/example/list')) {}
                break;
            case 'POST': // Création/Ajout de données
                if (ApiMisc::isRouteUsed('add/me/example')) {}
                break;
            case 'PUT': // Mise à jour des données
                if (ApiMisc::isRouteUsed('change/me/example')) {}
                break;
            case 'DELETE': // Suppression de données
                if (ApiMisc::isRouteUsed('delete/me/example')) {}
                break;
        }
    }
}

🔖 Licence

Ce logiciel est sous licence CC BY-SA 3.0 FR.

🚚 Installation

Télécharger le framework via GIT clone

git clone https://gitlab.com/juliennaskot/framework-apirest

Paramétrage du framework

cd src
edit config.env.php

Installation des librairies de composer

cd src
composer install

Si vous souhaitez rejoindre le discord du projet

🟨 DISCORD du projet

🍺 Si vous souhaitez m’offrir une bière

😍 PAYPAL