diff --git a/annexes/grafana.tex b/annexes/grafana.tex index 24c54b4..91f97c3 100644 --- a/annexes/grafana.tex +++ b/annexes/grafana.tex @@ -1,5 +1,7 @@ \chapter{Monitoring Stack} +InfluxDB ? https://www.influxdata.com/ + \section{Visualisation} \begin{quote} @@ -53,6 +55,12 @@ Feeding in your data is pretty easy, typically most of the effort is in collecti Loki est l'équivalent (développé directement par Grafana) de Prometheus. Il sera donc toujours nécessaire d'accumuler des logs au travers d'exporters. +\begin{quote} +Loki se comporte comme Prometheus : c'est un logiciel que vous allez installer sur votre machine qui sert pour le monitoring de votre infrastructure et le laisser vivre sa vie. Comme son mentor, ou presque, il va falloir lui associer des exporters pour le gaver de données : Promtail. + +-- https://www.dadall.info/article698/loki-jouer-avec-ses-logs-dans-grafana +\end{quote} + \section{Traces} Unlike other tracing tools, Grafana Traces does not index the traces which makes it possible to store orders of magnitude more trace data for the same cost, and removes the need for sampling. diff --git a/chapters/api.tex b/chapters/api.tex index bdbd9c5..508ebdb 100644 --- a/chapters/api.tex +++ b/chapters/api.tex @@ -91,8 +91,26 @@ class Contract(models.Model): \section{Mise en place} -La configuration des points de terminaison de notre API est relativement -touffue. Il convient de: +La configuration des points de terminaison de notre API est relativement touffue. +Pour cette raison, il convient de s'infliger à suivre une structure qui soit similaire pour chaque point de terminaison \cite[Predictability, Rule \#1]{django_for_startup_founders}. +Il convient de: + +\begin{enumerate} + \item + \textbf{Spécifier les permissions} + \item + \textbf{Copier et assainir les éléments communiqués en entrée vers des variables locales} + \item + \textbf{Valider les données d'entrée} + \item + \textbf{Enforce business requirements} + \item + \textbf{Perform busines logic} + \item + \textbf{Retourner une réponse HTTP} +\end{enumerate} + +-> Répartir les responsabilités selon les composants ci-dessous \begin{enumerate} \item @@ -107,6 +125,11 @@ touffue. Il convient de: \subsection{Serialiseurs} +Les sérialiseurs agissent litérallement comme des \texttt{forms}, mais au niveau de l'API. +Ils se basent sur un modèle, définit au niveau de la \texttt{class Meta}, permettent de choisir les champs qui seront sérialisés, définissent différentes méthodes d'accès à des propriétés spécifiques et des méthodes de validation. +Tout comme les forms. +Par exemple: + \begin{minted}{python} # serializers.py diff --git a/chapters/continuous-integration.tex b/chapters/continuous-integration.tex index d51091c..b2d0c7f 100644 --- a/chapters/continuous-integration.tex +++ b/chapters/continuous-integration.tex @@ -1,4 +1,4 @@ -\chapter{Intégration continue} +\chapter{Intégration continue / Déploiement Continu} https://circleci.com/pricing/ diff --git a/chapters/models.tex b/chapters/models.tex index a387c82..c192918 100644 --- a/chapters/models.tex +++ b/chapters/models.tex @@ -582,6 +582,21 @@ Ce gestionnaire constitue l'interface par laquelle vous accéderez à la base de Mais pour cela, vous aurez aussi besoin d'appliquer certains requêtes ou filtres. Et pour cela, vous aurez besoin des \texttt{querysets}, qui consistent en des ensembles de requêtes. +\subsection{Managers} + +Les \texttt{managers} constituent une partie de la couche de "services" de notre application. +Ces services peuvent se trouver à trois endroits \cite[Rule \# 2]{django_for_startup_founders}: + +\begin{enumerate} + \item Dans les modèles ou au niveau des managers + \item Dans les forms ou les sérializeurs + \item Dans une couche de services séparée du reste. +\end{enumerate} + + + +\subsection{Querysets} + Si on veut connaître la requête SQL sous-jacente à l'exécution du queryset, il suffit d'appeler la fonction str() sur la propriété \texttt{query}: \begin{verbatim} diff --git a/chapters/tools.tex b/chapters/tools.tex index ec6c27e..0d44a6a 100644 --- a/chapters/tools.tex +++ b/chapters/tools.tex @@ -200,3 +200,7 @@ Mais pour faciliter la gestion des bases de données elles-même, et si vous n' \subsection{Qualité du code} Code climate, SonarQube. + +\section{Insomnia} + + diff --git a/references.bib b/references.bib index 6499dda..deb5452 100644 --- a/references.bib +++ b/references.bib @@ -30,6 +30,12 @@ year = {2016}, type = {Book} } +@misc{django_for_startup_founders, + title = {Django for Startup Founders: A better software architecture for SaaS startups and consumer apps}, + author = {Alex Krupp}, + year = {2021}, + url = {https://alexkrupp.typepad.com/sensemaking/2021/06/django-for-startup-founders-a-better-software-architecture-for-saas-startups-and-consumer-apps.html} +} @book{expert_python, title = {Expert Python Programming}, author = {Jaworski, Michal and Ziadé, Tarek},