\documentclass{beamer}
\usetheme{focus}
\usepackage{minted}
\usepackage{mdframed}

\setbeameroption{show notes}
\surroundwithmdframed{minted}
\AtBeginEnvironment{frame}{\setcounter{footnote}{0}}
\setbeamerfont{footnote}{size=\tiny}

\title{Formation : usage des API Publik}
\author{Valentin Deniaud}
\titlegraphic{\includegraphics[scale=0.75]{eo.pdf}}
\institute{Académie de Versailles}
\date{29/06/2021}

\begin{document}

\begin{frame}
	\maketitle
\end{frame}

\begin{frame}{Sommaire}
	\tableofcontents
\end{frame}


\begin{frame}[noframenumbering,plain]
	Ne pas oublier de lancer l'enregistrement !
\end{frame}

\section{Introduction}
\begin{frame}{Vue d'ensemble}
	\begin{itemize}
		\item Pas un logiciel mais plusieurs « briques »
		\item Écrites en Python/Django
			\begin{itemize}
				\item Mais ce n'est pas important !
					\note[item]{Passer par les API permet justement d'utiliser son langage favori}
			\end{itemize}
		\item Reliées entre elles via
			\begin{itemize}
				\item API webservices
					\note[item]{Et ouais, le consommateur numéro 1 des API Publik c'est Publik.}
				\item Provisionning
				\item SSO
			\end{itemize}
	\end{itemize}
\end{frame}

\begin{frame}{Les briques et leurs fonctions}
	\begin{itemize}
		\item w.c.s. : démarches
			\note[item]{On va se concentrer sur wcs.}
		\item authentic : connexion
			\note[item]{Et parler un peu de l'API authentic.}
		\item combo : portail
		\item passerelle : connexion
			\note[item]{Éventuellement un laïus sur à quel point c'est nul les connecteurs + pas le but de cette formation.}
		\item chrono : prise de rendez-vous
			\note[item]{L'API chrono est foisonnante mais on va pas en parler sauf cas d'usage spécifique.}
	\end{itemize}
\end{frame}

\begin{frame}{Schéma général}
\includegraphics[scale=0.49]{architecture.png}
\end{frame}

\begin{frame}{Documentation utile}
	\small{\url{https://doc-publik.entrouvert.com/dev/connecteurs/}}
\end{frame}

\section{Source de données}
\begin{frame}[fragile]{Présentation}
	\begin{itemize}
		\item Objectif : récupérer des informations depuis un SI externe
		\item Dictionnaire JSON
		\item Structure très simple
			\note[item]{Rendre une API compatible Publik, c'est facile !}
	\end{itemize}
	\begin{minted}[tabsize=4]{json}
	{
		"err": 0,
		"data": {
			"text": "Donnée 1",
			"id": 1,
			"xxx": "clé supplémentaire"
		}
	}
	\end{minted}
\end{frame}

\begin{frame}[fragile]{Et les erreurs ?}
	\begin{minted}[tabsize=4]{json}
{
	"err": 1,
	"err_class": "TypeError",
	"err_desc": "name must be a string",
	"data": null
}
	\end{minted}
\end{frame}

\begin{frame}{Utilisation dans une démarche}
	\begin{itemize}
		\item Alimentation d'un champ liste\footnote{\url{https://doc-publik.entrouvert.com/admin-fonctionnel/fabrique-formulaires/form-champs/champ_liste/}}
			\note[item]{Exemple à base d'etherpad, genre \url{https://pad.inpt.fr/p/test-ws}}
		\item Cas d'usage avancé : autocomplétion\footnote{\url{https://doc-publik.entrouvert.com/admin-fonctionnel/les-tutos/utiliser-l-autocompletion/}}
			\note[item]{Exemple à partir d'un connecteur passerelle existant}
			\begin{itemize}
				\item Requis quand il y a beaucoup de données
			\end{itemize}
	\end{itemize}
\end{frame}

\begin{frame}{Utilisation dans le portail}
	\begin{itemize}
		\item Cellule JSON\footnote{\url{https://doc-publik.entrouvert.com/admin-fonctionnel/fabrique-formulaires/form-champs/champ_liste/}}
			\note[item]{Exemple à base d'etherpad, bis}
			\note[item]{Ne pas trop s'apesantir parce que relou pour nous d'intégrer ça.}
		\item Utilisation du langage de template Django\footnote{\url{https://docs.djangoproject.com/fr/2.2/ref/templates/language/}}
		\item Des filtres supplémentaires sont disponibles\footnote{\url{https://doc-publik.entrouvert.com/admin-fonctionnel/parametrage-avance/utiliser-les-filtres/}}
	\end{itemize}
\end{frame}

\section{Appel Webservice}
\begin{frame}{Présentation}
	\begin{itemize}
		\item Objectif : envoyer des données
			\note[item]{Exemple à base de \url{https://requestbin.com}}
			\begin{itemize}
				\item Toujours en JSON
			\end{itemize}
		\item Et en récupérer (même format que les sources de données)
	\end{itemize}
\end{frame}

\begin{frame}{Utilisation}
	\begin{itemize}
		\item Dans les workflows
			\begin{itemize}
				\item Action « Webservice »\footnote{\url{https://doc-publik.entrouvert.com/admin-fonctionnel/fabrique-de-workflows/les-actions-de-workflow/elements_appeler-webservices/}}
				\item Envoyer les données de la demande
			\end{itemize}
		\item Dans les formulaires
			\begin{itemize}
				\item Déclaration dans les paramètres
				\item Condition de sortie de page, champ commentaire...
			\end{itemize}
	\end{itemize}
\end{frame}

\section{API}
\begin{frame}{Authentification}
	\begin{itemize}
		\item Authentification HTTP Basic, à privilégier
		\item Authentification par signature \footnote{\url{https://doc-publik.entrouvert.com/dev/wcs/api-webservices/authentification/}}
	\end{itemize}
\end{frame}

\subsection{API démarches}
\begin{frame}{Agir sur une demande}
	\begin{itemize}
		\item Déclencheur d'une action « Saut automatique » \footnote{\url{https://doc-publik.entrouvert.com/admin-fonctionnel/fabrique-de-workflows/les-actions-de-workflow/actions_transition-automatique/}}
			\begin{itemize}
				\item Ou d'une action globale
			\end{itemize}
		\item Appel authentifié en POST vers l'adresse du formulaire à traiter \footnote{\url{https://doc-publik.entrouvert.com/dev/wcs/api-webservices/traitement-d-un-formulaire/}}
	\end{itemize}

\end{frame}

\begin{frame}{Web services exposés}
	\begin{itemize}
		\item w.c.s. expose une large API
			\begin{itemize}
				\item Récupérer la liste de tous les formulaires
				\item Récupérer les données d'un formulaire
				\item Compléter un formulaire
			\end{itemize}
		\item Documentation : \url{https://doc-publik.entrouvert.com/dev/wcs/api-webservices/}
			\note[item]{Souligner que c'est une approche alternative, push vs pull, tout ça.}
	\end{itemize}
\end{frame}

\subsection{API connexion}

\begin{frame}{Web services exposés}
	\begin{itemize}
		\item authentic expose une large API
			\begin{itemize}
				\item Lister et rechercher des utilisateurs
				\item Créer ou supprimer un utilisateur
				\item Agir sur les rôles
			\end{itemize}
		\item Documentation : \url{https://doc-publik.entrouvert.com/dev/api-authentic/}
	\end{itemize}
\end{frame}

\begin{frame}[focus]
	Fin !
\end{frame}
\end{document}
