naskot/api-naskot-maker

framework for creating APIs

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

This package is auto-updated.

Last update: 2024-11-12 22:49:56 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