Outillage du développeur backend

{firstname:'Stéphane' ,
 lastname : 'Michel',
 job: 'Software Craftsman'}

© Stéphane Michel

Lien vers des cheat sheet sur ES6 (à avoir sous la main)

Gestionnaire de sources incontournable.

 

A utiliser quelle que soit la taille du projet et le nombre de participant (même un seul !)

http://ndpsoftware.com/git-cheatsheet.html

GIT Cheat sheets (interactive) NDP Software

Installation / configuration

Documentation générale ici

Glossaire ici

Doc d'install par Delicious Insight, très bien faite

Fichier de configuration global à la racine du compte : gitconfig

[user]

    name = Stephane Michel

    email = smichel@sogitec.fr

[color]

    # Enable colors in color-supporting terminals

    ui = auto

[alias]

    st = status

    ci = commit

    lg = log --graph --date=relative --pretty=tformat:'%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%an %ad)%Creset'

    oops = commit --amend --no-edit

    review-local = "!git lg @{push}.."

[core]

  whitespace = -trailing-space

[pull]

    rebase = preserve  # réalise un rebase par défaut au lieu d'un merge lors d'un pull (évite la création systématique d'un commit de merge)

Pour windows config du shell ici

Principes

Principes

  • Working directory : Répertoire de travail. Vu comme un bac à sable. C’est là que les fichiers sont modifiés avant d’être éventuellement envoyés dans le stage avec un git add.

 

  • Stage : Zone de préparation (aussi nommé « cache » ou « index »). Contient la liste des fichiers qui seront examinée lors du prochain git commit.

 

  • Repository : Ensemble des commits réalisés. Le HEAD (état courant) pointe vers l’un d’eux. Le HEAD sera le parent du prochain commit. Les commandes git checkout (changement de branche) et git reset (annulation d’une modif) permettent de déplacer le HEAD.

sha1

Un commit regroupe un ensemble de modifications (dans un ou plusieurs fichiers).

La granularité est la modification, pas le fichier.

 

Chaque commit est identifié par un code alphanumérique appelé sha1

 

HEAD indique la branche (ou le commit) courant-e

Le sha1 permet de cibler un commit dans de nombreuses commandes git.

Quelques commandes indispensables 1/2

git help Aide sur les commande git. Exemple : git help commit
git init Initialisation du projet. Le répertoire courant devient la racine du projet (un répertoire .git est créé). A faire en même temps que le npm init.
git add myfile Ajout dans le cache/stage du fichier myfile
git add . Ajout dans le cache/stage de tous les fichiers modifiés à partir le répertoire courant (scan les sous répertoires)
git commit -m "Message commit" Commit des fichiers présents dans le stage. Le message doit être cours mais parlant.
git st Etat des modifications (fichiers modifiés, fichiers dans le stage, nouveaux fichiers)
Alias de git status
git lg --all -10 Affiche l'histo des derniers commit (ici 10) sur toutes les branches (--all).
Alias du git log (voir slide précédent)
git diff myfile Affiche les différences entre le fichier local et sa version dans le dernier commit.
git reset HEAD myfile Enlève un fichier du stage (si un git add l'y avait mis par erreur)
git stash Prend toutes les modifs en cours et les met de côté temporairement.
git stash pop : permet de retrouver les modifications du dernier stash réalisé

Quelques commandes indispensables 2/2

git clone URI Permet de télécharger en local un repository git complet.
Exemple : git clone https://git.lolcatz.com/git/yolo.git
git push referentiel branche Sauvegarde les commits locaux dans le référentiel distant
git pull referentiel branche Récupère en local des commit présents dans le référentiel distant. Réalise un git fetch puis soit un git merge ou un git rebase (suivant la manière dont git est configuré)
git fetch referentiel branche Récupère les données du référentiel distant et les stockent dans le référentiel local. Mais ne modifie pas le workspace courant (pratique si l'on souhaite récupérer des sources distantes avant de se déconnecter du réseau et faire le merge plus tard dans le train...)
git merge branche/sha1 Réalise le merge (des commit ciblés par la branche ou le sha1) dans la branche locale.
git branch maBranche Permet de créer une branche au niveau du commit courant. Attention, ne se postionne pas dans la nouvelle branche créée. Pour cela il faut faire ensuite un git checkout maBranche.
git checkout branch Permet de changer de branche.
git checkout myfile Permet d'annuler les modifications locale d'un fichier en l'écrasant à partir du dernier commit.

.gitignore

A la racine du projet, un fichier .gitignore contient la définition des sources qui ne doivent pas être prises en compte dans GIT.

Exemple : fichiers de compilation (dll, fichier temporaires, exe, etc.)

Pour générer automatiquement un .gitignore en fonction de la technologie de développement utilisée :

gitignore.io http://www.gitignore.io/

Customisation de son prompt pour GIT

http://overapi.com/nodejs​

Node.js cheat sheets  overapi.com

https://nikgrozev.com/2017/01/22/node-js-cheatsheet-part-1/​

Node.js cheat sheets [Part 1]  Nikolay Grozev • 22/01/2017 • Toute la chaîne depuis l'installation de node (avec nvm) jusqu'aux promesses en passant par le paramétrage babel.

Initialisation d'un projet avec express

express --view=pug myProject   // pug remplace jade
cd myProject

npm i          // téléchargement des modules

git init       // initialisation du projet git

// creation .gitignore (via https://www.gitignore.io/)

git add .      // Ajout de tous les fichiers dans stage

git commit -m "Initialisation"  

nodemon

 
 nodemon app.js  

 

Installation

Utilisation

 
 npm i nodemon  

 

https://devhints.io/npm​

npm cheat sheets  devhints.io

Node package manager

 

Installé avec node.js

Quelques commandes

npm init Création d'un nouveau projet node dans le répertoire courant (à faire en même temps que le git init). Un fichier package.json est créé.
npm i --save monmodule Télécharge et installe monmodule dans les modules du projet (propriété "dependencies" de package.json).
Alias de npm install --save monmodule.
npm i --save-dev monmodule Idem mais le module est associé à l'environnement de développement uniquement (propriété "devDependencies" de package.json). Exemple : modules du genre outils ou tests unitaire.
npm i  Télécharge et install tous les modules déclarés dans le fichier package.json.
Permet d'initialiser un projet node.
npm i --production Idem npm i mais se limite aux packages qui sont dans "dependencies" (et pas ceux de devDependencies)
npm uninstall monmodule Supprime le module monmodule du projet.
npm update monmodule Met à jour le module monmodule (la dernière version stable)
npm list Liste l'ensemble des modules et sous modules du projet.

MongoDB

Une des principales BDD no SQL.

https://curl.haxx.se/docs/manpage.html​

curl man page Daniel Stenberg

Outil en ligne de commande pour la manipulation d'URL.

Couvre l'ensemble du protocole HTTP(s).

Outil en ligne de commande pour la manipulation d'URL.

Couvre l'ensemble du protocole HTTP(s).

curl -i mon_URL

Requête de type GET avec affichage de l'entête

Requête de type POST avec envoi de données en JSON et affichage de l'entête

curl -i -X POST -H 'Content-Type: application/json' -d '{"login":"davidwalsh","password":"something"}' http://localhost:3000/v1/auth/login

https://www.npmjs.com/package/httpstat

httpstat Yosuke FURUKAWA

curl like tool

httpstat

Disponible dans plusieurs langages : python, go et node.js

npm i -g npmstat

Excellent éditeur de code, gratuit, rapide, riche (plugin)..

Plugins quelques indispensables

https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint

ESLint Dirk Baeumer • Vérification de code JS

https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens​

GitLens Eric Amodio • Intégration de GIT dans l'éditeur

https://marketplace.visualstudio.com/items?itemName=eg2.vscode-npm-script​

npm egamma • Intégration de npm dans l'éditeur

https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode​

Prettier Esben Petersen • Beautyfullage de code

Plugins quelques indispensables

https://marketplace.visualstudio.com/items?itemName=arjun.swagger-viewer​

Swagger Viewer Arjun G • Visualisation des fichiers swagger ou OpenAPI dans VSC. Attention : Supporte mal l'OpenAPI 3.0

https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced​

Markdown Preview Enhanced  Yiyi Wang • Visualisation des fichiers markdown (exemple : readme.md de GitHub)

https://marketplace.visualstudio.com/items?itemName=zoellner.openapi-preview

OpenAPI Viewer Andreas Zoellner • Visualisation des fichiers  OpenAPI 3.0 dans VSC

eslint --init
? How would you like to configure ESLint? Answer questions about your style
? Which version of ECMAScript do you use? ES2015
? Are you using ES6 modules? Yes
? Where will your code run? Node
? Do you use CommonJS? Yes
? Do you use JSX? No
? What style of indentation do you use? Spaces
? What quotes do you use for strings? Single
? What line endings do you use? Unix
? Do you require semicolons? No
? What format do you want your config file to be in? JSON
Local ESLint installation not found.
The config that you've selected requires the following dependencies:

eslint@latest
Successfully created .eslintrc.json file in G:\dev\Projects\restfull1
ESLint was installed locally. We recommend using this local copy instead of your globally-installed copy.

Installation globale

npm i -g eslint 

Initialisation

et

Faire cohabiter ESLint et Prettier dans VSCode

https://learning.getpostman.com/​

Postman learning center  postman

Outil graphique (contrairement à curl qui est en ligne de commande) pour réaliser des appels d'URL.

Riche et bien conçu.

https://portswigger.net/burp

The burp Suite family  Portswigger

Outil de "hacker" pour réaliser de l'interception et de l'analyse de trafic.

Très utile pour analyser les requêtes entre le client et le serveur, plus plein d'outils inclus.
La version community est gratuite et déjà très riche.

ab : Apache Bench tool

Outil d'injection / montée en charge en ligne de commande.

Simple, gratuit mais très efficace.

ab : Apache Bench tool

Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
    -n requests     Number of requests to perform
    -c concurrency  Number of multiple requests to make at a time
    -t timelimit    Seconds to max. to spend on benchmarking
                    This implies -n 50000
    -s timeout      Seconds to max. wait for each response
                    Default is 30 seconds
    -p postfile     File containing data to POST. Remember also to set -T
    -u putfile      File containing data to PUT. Remember also to set -T
    -T content-type Content-type header to use for POST/PUT data, eg.
                    'application/x-www-form-urlencoded'
                    Default is 'text/plain'
    -v verbosity    How much troubleshooting info to print
    -C attribute    Add cookie, eg. 'Apache=1234'. (repeatable)
    -H attribute    Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
                    Inserted after all normal header lines. (repeatable)
    -V              Print version number and exit
    -k              Use HTTP KeepAlive feature
    -g filename     Output collected data to gnuplot format file.
    -e filename     Output CSV file with percentages served
    -r              Don't exit on socket receive errors.
    -m method       Method name
    -h              Display usage information (this message)

...

La boite à outils pour la gestion des certificats (HTTPs dans notre cas).

Téléchargement

Teste la sécurité des serveurs Web

ZAP

Utilisation très simple

ZAP

Résultat d'une attaque

ZAP

Le module node helmet permet de régler une grande partie des failles détectés par ZAP

Markdown

La syntaxe markdown - Framasoft -  https://docs.framasoft.org/fr/grav/markdown.html

Outillage du développeur backend

By steph michel

Outillage du développeur backend

Liste des outils utiles aux développeurs backend. URL de téléchargement, liste de cheat sheets, etc.

  • 773