{"id":2430,"date":"2021-12-29T08:46:22","date_gmt":"2021-12-29T07:46:22","guid":{"rendered":"https:\/\/digital.gov.mg\/?p=2430"},"modified":"2022-11-14T14:31:08","modified_gmt":"2022-11-14T13:31:08","slug":"normes-et-standards-dinteroperabilite","status":"publish","type":"post","link":"https:\/\/digital.gov.mg\/en\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/","title":{"rendered":"Normes et Standards d\u2019Interop\u00e9rabilit\u00e9"},"content":{"rendered":"\n<p><strong><em>Il est \u00e0 noter que cet article est \u00e9volutif dans le temps selon les contextes<\/em><\/strong><\/p>\n\n\n\n<p>Derni\u00e8re mise \u00e0 jour :  14 novembre 2022 <\/p>\n\n\n\n<p><strong>Version num\u00e9rique : <a href=\"https:\/\/digital.gov.mg\/wp-content\/uploads\/2021\/12\/Normes-et-standards-dinterop\u00e9rabilit\u00e9-V1.docx.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">Normes et standards d&#8217;interop\u00e9rabilit\u00e9 v1.0.0<\/a><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"\"><tbody><tr><td>\n<strong>Diffusion pour action&nbsp;<\/strong>\n<\/td><td>\nTous les services publics\n<\/td><\/tr><tr><td>\n<strong>Diffusion pour information&nbsp;<\/strong>\n<\/td><td>\nSecteur priv\u00e9\n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>DOCUMENTS DE R\u00c9F\u00c9RENCE<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"\"><tbody><tr><td>\n<strong>N\u00b0<\/strong>\n<\/td><td>\n<strong>Classement<\/strong>\n<\/td><td>\n<strong>Titre<\/strong>\n<\/td><\/tr><tr><td>\n1\n<\/td><td>&nbsp;<\/td><td>\n<a href=\"https:\/\/digital.gov.mg\/2022\/05\/05\/cadre-dinteroperabilite\/\" target=\"_blank\" rel=\"noreferrer noopener\">Cadre d\u2019interop\u00e9rabilit\u00e9<\/a>\n<\/td><\/tr><tr><td>\n2\n<\/td><td>&nbsp;<\/td><td>\n<a href=\"https:\/\/digital.gov.mg\/2022\/01\/07\/manuel-des-standards-de-services\/\" target=\"_blank\" rel=\"noreferrer noopener\">Manuel des standards des services<\/a>\n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>LISTE DES ABREVIATIONS<\/strong><\/p>\n\n\n\n<p><strong>AES<\/strong> : Advanced Encryption Standard<br><strong>AMOA<\/strong> : Assistant \u00e0 la Ma\u00eetrise d\u2019Ouvrage<br><strong>API<\/strong> : Application Programming Interface<br><strong>AWS<\/strong> : Amazon Web Services<br><strong>CA<\/strong> : Certification Authority<br><strong>CNaPS <\/strong>: Caisse Nationale de Pr\u00e9voyance Sociale<br><strong>CSV <\/strong>: Comma-Separated Values<br><strong>HTTP<\/strong> : HyperText Transfer Protocol<br><strong>HTTPS<\/strong> : HyperText Transfer Protocol Secure<br><strong>IPSEC<\/strong> : Internet Protocol Security<br><strong>JSON<\/strong> : JavaScript Object Notation<br><strong>JWT<\/strong> : JSON Web Token<br><strong>MEF<\/strong> : Minist\u00e8re de l&#8217;Economie et des Finances<br><strong>MEN<\/strong> : Minist\u00e8re de l&#8217;Education Nationale<br><strong>MID<\/strong> : Minist\u00e8re de l&#8217;Int\u00e9rieur et de la D\u00e9centralisation<br><strong>MINJUS<\/strong> : Minist\u00e8re de la Justice<br><strong>MINSanP<\/strong> : Minist\u00e8re de la Sant\u00e9 Publique<br><strong>MNDPT<\/strong> : Minist\u00e8re du d\u00e9veloppement Num\u00e9rique, de la transformation Digitale, des Postes et des T\u00e9l\u00e9communications<br><strong>NTP<\/strong> : Network Time Protocol<br><strong>OCSP<\/strong> : Online Certificate Service Protocol<br><strong>OIDC<\/strong> : OpenID Connect<br><strong>OSI<\/strong> : Open Systems Interconnection<br><strong>PKI<\/strong> : Public Key Infrastructure<br><strong>PMO<\/strong> : Partenaire de Mise en Oeuvre<br><strong>PO<\/strong> : Product Owner<br><strong>REST<\/strong> : REpresentational State Transfer<br><strong>RGPD<\/strong> : R\u00e8glement G\u00e9n\u00e9ral sur la Protection des Donn\u00e9es<br><strong>RSA<\/strong> : R\u00e8glement G\u00e9n\u00e9ral sur la Protection des Donn\u00e9es<br><strong>SALM<\/strong> : Security Assertion Markup Language<br><strong>SI<\/strong> : Syst\u00e8me d\u2019Informations<br><strong>SOAP<\/strong> : Simple Object Access Protocol<br><strong>SSL<\/strong> : Secure Sockets Layer<br><strong>SSO<\/strong> : Single Sign-On<br><strong>TLS<\/strong> : Transport Layer Security<br><strong>TSA<\/strong> : Time Stamping Authority<br><strong>UGD<\/strong> : Unit\u00e9 de Gouvernance Digitale<br><strong>URI<\/strong> : Uniform Resource Identifier<br><strong>VPN<\/strong> : Virtual Private Network<br><strong>W3C<\/strong> : World Wide Web Consortium<br><strong>WSDL<\/strong> : Web Services Description Language<br><strong>XML<\/strong> : eXtensible Markup Language<br><strong>X-ROAD SS<\/strong> : X-ROAD Security Server<br><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>I. Normes de d\u00e9veloppement des Services Web et des API\u2019s&nbsp;<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>I.1. Introduction<\/strong><\/h2>\n\n\n\n<p>Sur la base des normes et des meilleures pratiques utilis\u00e9es \u00e0 l\u2019\u00e9chelle internationale, l\u2019utilisation des directives suivantes pour la construction de services Web et API\u2019s est sugg\u00e9r\u00e9e.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>I.2. D\u00e9finition des param\u00e8tres d\u2019entr\u00e9e\/sortie.<\/strong><\/h2>\n\n\n\n<p>Il est recommand\u00e9 que l\u2019institution \u00e9tablisse les param\u00e8tres d\u2019entr\u00e9e et de sortie du service selon leur nature.&nbsp;Chaque param\u00e8tre sera clairement d\u00e9fini et d\u00e9crira son objectif.&nbsp;Cette d\u00e9finition facilitera, plus tard, la g\u00e9n\u00e9ration de la documentation respective.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>I.3. Les bonnes pratiques.<\/strong><\/h2>\n\n\n\n<p>Lors de la mise en \u0153uvre d\u2019un service Web et d\u2019une API, il est important de prendre en compte les exp\u00e9riences de mise en \u0153uvre avec des r\u00e9sultats positifs qui aident \u00e0 am\u00e9liorer ou \u00e0 r\u00e9soudre les probl\u00e8mes lors de la mise en service des services.&nbsp;La syst\u00e9matisation de ces exp\u00e9riences est ce qu\u2019on appelle les bonnes pratiques.<\/p>\n\n\n\n<p>Il est recommand\u00e9 d\u2019\u00eatre coh\u00e9rent dans la mise en \u0153uvre des services Web et API\u2019s, en maintenant les bonnes pratiques dans tous les services en fonction de la technologie utilis\u00e9e.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>I.4. Validation des messages.<\/strong><\/h2>\n\n\n\n<p>La validation des messages est effectu\u00e9e pour v\u00e9rifier que la structure des objets utilis\u00e9s dans le service Web et l\u2019API est correcte.<\/p>\n\n\n\n<p>La validation des messages permet d\u2019\u00e9viter des dysfonctionnements impr\u00e9vus lorsque les clients consomment le service.<\/p>\n\n\n\n<p>Il est recommand\u00e9 de valider la structure, le format et la qualit\u00e9 des messages, \u00e0 la fois des param\u00e8tres d\u2019entr\u00e9e et de sortie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>I.5. Gestion des versions<\/strong><strong>.<\/strong><\/h2>\n\n\n\n<p>Parfois, il est n\u00e9cessaire d\u2019avoir plusieurs versions d\u2019un m\u00eame service.&nbsp;Cela peut arriver lorsque le service pr\u00e9sente de nouvelles caract\u00e9ristiques de fonctionnement (ou en cas de besoin d\u2019autres param\u00e8tres d\u2019entr\u00e9e\/sortie).<\/p>\n\n\n\n<p>Il est toujours recommand\u00e9 de versionner les services Web et API\u2019s pour \u00e9viter des d\u00e9sagr\u00e9ments aux consommateurs qui utilisent d\u00e9j\u00e0 le service.&nbsp;La gestion des versions doit \u00eatre envisag\u00e9e d\u00e8s le d\u00e9but du d\u00e9ploiement.<\/p>\n\n\n\n<p>Les changements ou modifications entre les versions sont document\u00e9s et publi\u00e9s conform\u00e9ment aux dispositions de sa Documentation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>I.6. Gestion des erreurs.<\/strong><\/h2>\n\n\n\n<p>Tous les probl\u00e8mes pr\u00e9sent\u00e9s par les services Web et API\u2019s doivent \u00eatre identifi\u00e9s, collect\u00e9s et retenus dans la piste d&#8217;audit \/ journal, afin que l\u2019institution consommatrice (organisation cliente) interpr\u00e8te les raisons des \u00e9checs.<\/p>\n\n\n\n<p>Il est recommand\u00e9 que le message d\u2019erreur comporte au moins un code et une description permettant de le comprendre clairement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>I.7. Codage.<\/strong><\/h2>\n\n\n\n<p>Les institutions qui participent \u00e0 l\u2019\u00e9change de donn\u00e9es \u00e0 partir d\u2019un service web ou d\u2019un API (m\u00eame s\u2019il \u00e9tait dans une autre langue) doivent interpr\u00e9ter de la m\u00eame mani\u00e8re les caract\u00e8res utilis\u00e9s pour la transmission des messages.<\/p>\n\n\n\n<p>Pour cette raison, il est toujours recommand\u00e9 d\u2019utiliser l\u2019encodage UTF-8 dans tous les services Web et API\u2019s.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>I.8. Fuseau horaire.<\/strong><\/h2>\n\n\n\n<p>Il est recommand\u00e9 que tous les services Web et API\u2019s d\u2019interop\u00e9rabilit\u00e9 utilisent le m\u00eame fuseau horaire, afin que toutes les institutions con\u00e7oivent les heures de la m\u00eame mani\u00e8re.&nbsp;Pour notre cas GMT+3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>I.9. Fichier de services.<\/strong><\/h2>\n\n\n\n<p>Il est n\u00e9cessaire de documenter les services offerts par chaque institution.&nbsp;Pour chaque service, on doit d\u00e9tailler les donn\u00e9es telles que l\u2019url pour effectuer la consommation, les param\u00e8tres d\u2019entr\u00e9e et les donn\u00e9es de sortie.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"\"><thead><tr><th>&nbsp;<\/th><th>\n<strong>Information technique<\/strong>\n<\/th><th>&nbsp;<\/th><\/tr><\/thead><tbody><tr><td>\nAdresse physique du service\n<\/td><td>\nURL de consommation de service\n<\/td><td>&nbsp;<\/td><\/tr><tr><td>\nType\n<\/td><td>\nTechnologie utilis\u00e9e pour obtenir des informations de service (SOAP, REST ou autre)\n<\/td><td>\nObligatoire\n<\/td><\/tr><tr><td>\nEnvironnement\n<\/td><td>\nEnvironnement de d\u00e9veloppement, de test, de production ou autre\n<\/td><td>\nObligatoire\n<\/td><\/tr><tr><td>\nDonn\u00e9es d\u2019entr\u00e9e\n<\/td><td>\nD\u00e9tail des param\u00e8tres d\u2019entr\u00e9e du service ou des modificateurs\n<\/td><td>\nObligatoire\n<\/td><\/tr><tr><td>\nDonn\u00e9es de sortie\n<\/td><td>\nD\u00e9tail de la structure de r\u00e9ponse du service\n<\/td><td>\nObligatoire\n<\/td><\/tr><tr><td>\nType de connexion\n<\/td><td>\nMoyens par lesquels les donn\u00e9es du fournisseur des services sont transmises aux clients\n<\/td><td>\nObligatoire\n<\/td><\/tr><tr><td>\nLogiciels associ\u00e9s\n<\/td><td>\nLiens logiciels li\u00e9s au service\n<\/td><td>&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>\n<strong>Normes de s\u00e9curit\u00e9<\/strong>\n<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>II.1 Introduction<\/strong><\/h2>\n\n\n\n<p>La s\u00e9curit\u00e9 de l&#8217;information est la pr\u00e9servation de la confidentialit\u00e9, de l&#8217;int\u00e9grit\u00e9 et de la disponibilit\u00e9 de l&#8217;information (D : Disponibilit\u00e9, C : Confidentialit\u00e9, I&nbsp;: Int\u00e9grit\u00e9, P&nbsp;: Preuve); D&#8217;autres propri\u00e9t\u00e9s telles que l&#8217;authenticit\u00e9, la responsabilit\u00e9, la non-r\u00e9pudiation et la fiabilit\u00e9 peuvent \u00e9galement \u00eatre impliqu\u00e9es.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>II.2 S\u00e9curit\u00e9 de la couche de transport.<\/strong><\/h2>\n\n\n\n<p>Il est n\u00e9cessaire d&#8217;avoir des protocoles de s\u00e9curit\u00e9 dans le canal, couche d\u2019\u00e9change ou le support par lequel les informations seront transmises, ceci pour emp\u00eacher les autres de les voir ou de les modifier.&nbsp;Il existe diff\u00e9rentes technologies \u00e0 cet effet, telles que :&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>II.2.1 TLS (Transport Layer Security).<\/strong><\/h2>\n\n\n\n<p>Le protocole TLS permet l&#8217;identification et l&#8217;authentification des \u00e9tablissements&nbsp;publiques, des organisations ou entit\u00e9s au niveau du protocole de transport, garantissant que la communication est confidentielle et que les informations envoy\u00e9es et\/ou re\u00e7ues sont compl\u00e8tes.<\/p>\n\n\n\n<p>Ce protocole fournit un moyen de communication s\u00e9curis\u00e9, son objectif principal \u00e9tant la confidentialit\u00e9 des informations transf\u00e9r\u00e9es.&nbsp;L&#8217;int\u00e9grit\u00e9 des informations \u00e9chang\u00e9es est obtenue en authentifiant les messages \u00e0 chaque transmission.<\/p>\n\n\n\n<p>Il est toujours recommand\u00e9 d&#8217;utiliser TLS dans les processus d&#8217;interop\u00e9rabilit\u00e9 qui n\u00e9cessitent un certain type d&#8217;authentification et \/ ou de confidentialit\u00e9, soit avec des cl\u00e9s obtenues aupr\u00e8s d&#8217;un organisme de certification, soit avec des cl\u00e9s autog\u00e9n\u00e9r\u00e9es, car sa mise en \u0153uvre est en g\u00e9n\u00e9ral simple \u00e0 r\u00e9aliser, par rapport \u00e0 d&#8217;autres les technologies.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>II.2.2 VPN (Virtual Private Network ou r\u00e9seau priv\u00e9 virtuel).<\/strong><\/h2>\n\n\n\n<p>Un VPN est un canal de communication priv\u00e9 crypt\u00e9.&nbsp;Il s&#8217;agit d&#8217;un environnement de communication o\u00f9 l&#8217;entr\u00e9e est restreinte et autoris\u00e9e uniquement pour les parties qui souhaitent communiquer&nbsp;;&nbsp;c&#8217;est-\u00e0-dire que le canal ne peut pas \u00eatre vu ou compris par des personnes ext\u00e9rieures.<\/p>\n\n\n\n<p>Un VPN offre un canal de transmission s\u00e9curis\u00e9 sur un r\u00e9seau non s\u00e9curis\u00e9, avec les propri\u00e9t\u00e9s suivantes : confidentialit\u00e9, int\u00e9grit\u00e9 et authentification.&nbsp;Toutes ces propri\u00e9t\u00e9s sont ajout\u00e9es \u00e0 la propre s\u00e9curit\u00e9 du service Web (le service Web peut avoir une authentification et une autorisation).<\/p>\n\n\n\n<p>Cette technologie est utilis\u00e9e lorsqu&#8217;il est n\u00e9cessaire de transmettre des informations sensibles, puisqu&#8217;il existe diff\u00e9rentes technologies pour la mise en place de VPN, la connexion entre les produits de diff\u00e9rents fournisseurs est souvent complexe.<\/p>\n\n\n\n<p>Il est possible de cr\u00e9er un VPN en utilisant des m\u00e9canismes qui op\u00e8rent dans les premi\u00e8res couches du mod\u00e8le OSI comme IPSEC.&nbsp;Ces tunnels permettent l&#8217;encapsulation et la connexion de deux r\u00e9seaux physiquement s\u00e9par\u00e9s.<br>Parfois, il est inutile ou peu pratique de connecter deux r\u00e9seaux, surtout si nous avons seulement besoin de partager un service Web entre institutions.&nbsp;Dans le cas le plus courant, un service Web peut \u00eatre prot\u00e9g\u00e9 et encapsul\u00e9 \u00e0 l&#8217;aide d&#8217;une identification mutuelle TLS.<\/p>\n\n\n\n<p>Enfin, MPLS est une technologie d&#8217;\u00e9tiquetage de trafic qui permet de cr\u00e9er des canaux priv\u00e9s sur un r\u00e9seau public sans chiffrer les donn\u00e9es, il est donc essentiel d&#8217;utiliser TLS.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>II.2.3. Recommandations g\u00e9n\u00e9rales.<\/strong><\/h2>\n\n\n\n<p>Il est toujours recommand\u00e9 d&#8217;utiliser TLS pour prot\u00e9ger et partager des services Web.&nbsp;Cependant, si les donn\u00e9es n\u00e9cessitent un degr\u00e9 de s\u00e9curit\u00e9 plus \u00e9lev\u00e9 dans le transport, et qu&#8217;il est souhaitable d&#8217;avoir deux r\u00e9seaux connect\u00e9s entre les institutions, un VPN (IPSEC) peut \u00eatre utilis\u00e9.<\/p>\n\n\n\n<p>Il est important de prendre en compte que l&#8217;utilisation de ces technologies n&#8217;est pas exclusive, c&#8217;est-\u00e0-dire qu&#8217;un tunnel TLS peut \u00eatre utilis\u00e9 au sein d&#8217;un canal VPN\/IPSEC.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>II.3 S\u00e9curit\u00e9 des donn\u00e9es.<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>II.3.1 Authentification et autorisation.<\/strong><\/h3>\n\n\n\n<p>Lors de la publication de donn\u00e9es via un service Web, il est n\u00e9cessaire d&#8217;identifier qui peut acc\u00e9der au service, sauf dans les services Web accessibles au public.&nbsp;L&#8217;authentification est la v\u00e9rification de l&#8217;institution de l&#8217;institution consommatrice (Organisation cliente), tandis que l&#8217;autorisation est la v\u00e9rification des autorisations que ladite institution poss\u00e8de sur une ressource sp\u00e9cifique.<\/p>\n\n\n\n<p>L&#8217;authentification doit toujours \u00eatre effectu\u00e9e en premier, puis l&#8217;autorisation.&nbsp;Cela doit \u00eatre v\u00e9rifi\u00e9 dans chaque demande de l&#8217;institution de consommation envers le service.<\/p>\n\n\n\n<p>L&#8217;authentification et l&#8217;autorisation peuvent s&#8217;effectuer de diff\u00e9rentes mani\u00e8res, dont les principales sont d\u00e9taill\u00e9es ci-dessous :<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.1.1 Authentification de base<\/em><\/strong><\/h4>\n\n\n\n<p>L&#8217;authentification de base est la m\u00e9thode la plus simple et utilise un nom d&#8217;utilisateur et un mot de passe pour identifier l&#8217;institution consommatrice.<\/p>\n\n\n\n<p>Il est recommand\u00e9 d&#8217;utiliser ce type d&#8217;authentification dans les services Web lorsque les donn\u00e9es \u00e0 \u00e9changer n&#8217;ont pas beaucoup de restrictions d&#8217;utilisation.&nbsp;De plus, ce type d&#8217;authentification permettra \u00e0 l&#8217;utilisateur de l&#8217;\u00e9tablissement consommateur d&#8217;\u00eatre identifi\u00e9 au minimum.&nbsp;A noter que ce type d&#8217;authentification peut \u00eatre utilis\u00e9 aussi bien avec un service web de type REST que SOAP.<\/p>\n\n\n\n<p>Il est recommand\u00e9 de mettre en place des proc\u00e9dures d&#8217;utilisation et de cycle de vie des mots de passe.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.1.2 Authentification avec des certificats \u00e9lectroniques.<\/em><\/strong><\/h4>\n\n\n\n<p>L&#8217;authentification par certificats est effectu\u00e9e en demandant le certificat num\u00e9rique du consommateur du service Web (client ou organisation cliente) et en v\u00e9rifiant chaque message envoy\u00e9 par rapport au dit certificat, ce qui garantit que le consommateur du service est bien celui qu&#8217;il pr\u00e9tend \u00eatre.&nbsp;Ce m\u00e9canisme est fastidieux si l&#8217;on authentifie des personnes\/navigateurs mais il est surtout utile pour authentifier un autre service web puisqu&#8217;il est int\u00e9gr\u00e9 au protocole HTTPS et assure ainsi l\u2019identification, l\u2019authentification, la confidentialit\u00e9 et l\u2019int\u00e9grit\u00e9.&nbsp;Ce mode est con\u00e7u comme&nbsp;une authentification TLS mutuelle<\/p>\n\n\n\n<p>Si l&#8217;authentification avec des certificats num\u00e9riques doit \u00eatre mise en \u0153uvre, il est n\u00e9cessaire de v\u00e9rifier que le certificat a \u00e9t\u00e9 d\u00e9livr\u00e9 par une autorit\u00e9 de certification de confiance (CA), qu&#8217;il n&#8217;a pas expir\u00e9 et n&#8217;a pas \u00e9t\u00e9 r\u00e9voqu\u00e9 (on peut utiliser OCSP ou Online Certificate Service Protocol pour se faire).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.1.3 Authentification avec JWT (Jetons Web JSON).<\/em><\/strong><\/h4>\n\n\n\n<p>JWT est le principal moyen d&#8217;authentification dans les services de type REST, c&#8217;est un moyen compact et autonome d&#8217;envoyer des donn\u00e9es en toute s\u00e9curit\u00e9 entre les parties au format JSON.<\/p>\n\n\n\n<p>Un JWT peut \u00eatre sign\u00e9 avec un algorithme sym\u00e9trique (AES) et asym\u00e9trique (RSA).<\/p>\n\n\n\n<p>Les JWT se composent de trois parties s\u00e9par\u00e9es par des points (.), qui sont&nbsp;: l&#8217;en-t\u00eate (en-t\u00eate), le corps (charge utile) et la signature (signature).<\/p>\n\n\n\n<p>Le cryptage des donn\u00e9es corporelles doit \u00eatre envisag\u00e9 s&#8217;il est consid\u00e9r\u00e9 comme sensible, voir point (Confidentialit\u00e9).<\/p>\n\n\n\n<p>En raison de sa facilit\u00e9 de mise en \u0153uvre lors de l&#8217;utilisation d&#8217;un service REST, il est toujours recommand\u00e9 d&#8217;utiliser JWT, sans oublier que plusieurs fois il est n\u00e9cessaire de r\u00e9voquer un jeton, pour lequel il est sugg\u00e9r\u00e9 qu&#8217;au moins cette impl\u00e9mentation supporte la r\u00e9vocation en plus du d\u00e9lai d&#8217;expiration du JWT.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.1.4 Authentification et autorisation avec OAuth<\/em><\/strong><strong><em> (OAuth 1.0a et OAuth2).<\/em><\/strong><\/h4>\n\n\n\n<p>Il existe deux versions : OAuth 1.0a et OAuth2, cette derni\u00e8re \u00e9tant la plus utilis\u00e9e.<\/p>\n\n\n\n<p>OAuth2 est un protocole d&#8217;autorisation et le mode d&#8217;authentification d\u00e9passe le cadre de la sp\u00e9cification, de sorte que tout processus d&#8217;authentification peut \u00eatre mis en \u0153uvre.&nbsp;Une grande majorit\u00e9 des impl\u00e9mentations de la norme proposent d\u00e9j\u00e0 des m\u00e9canismes d&#8217;authentification.<\/p>\n\n\n\n<p>Dans OAuth2 il y a plusieurs r\u00f4les : le client (ou l&#8217;application qui essaie d&#8217;acc\u00e9der aux informations de l&#8217;utilisateur), le serveur de ressources, le serveur d&#8217;autorisation (c&#8217;est celui qui demande \u00e0 l&#8217;utilisateur s&#8217;il veut vraiment donner les permissions au client) et le Nom d&#8217;utilisateur.&nbsp;Il existe \u00e9galement plusieurs flux ou moyens d&#8217;obtenir un token, les&nbsp; principaux sont :<\/p>\n\n\n\n<p>Octroi d&#8217;informations d&#8217;identification client (Client Credentials Grant)&nbsp;: Cette m\u00e9thode est couramment utilis\u00e9e pour les communications de serveur \u00e0 serveur, le client envoie ses informations d&#8217;identification au serveur d&#8217;autorisation et renvoie un jeton sign\u00e9 (le client et l&#8217;utilisateur sont les m\u00eames).&nbsp;Octroi de code d&#8217;autorisation (Authorization Code Grant)&nbsp;: couramment utilis\u00e9 dans les applications Web lorsque le client souhaite acc\u00e9der \u00e0 des ressources prot\u00e9g\u00e9es en faveur de l&#8217;utilisateur.<\/p>\n\n\n\n<p>Le flux est le suivant : le client redirige l&#8217;utilisateur vers le serveur d\u2019autorisation (Serveur d\u2019identit\u00e9 SSO \/ SAML);&nbsp;puis il est demand\u00e9 \u00e0 l&#8217;utilisateur de saisir ses identifiants dans le serveur d&#8217;autorisation et d&#8217;approuver la demande du client ;&nbsp;puis le client avec l&#8217;autorisation d\u00e9j\u00e0 donn\u00e9e par l&#8217;utilisateur&nbsp; n\u00e9gocie un jeton d&#8217;acc\u00e8s avec le serveur d&#8217;autorisation (c&#8217;est un appel en faveur d&#8217;un utilisateur, l&#8217;utilisateur et le client sont diff\u00e9rents). [Keycloack, IdentityServer]<\/p>\n\n\n\n<p>OAuth est complexe \u00e0 mettre en \u0153uvre ;&nbsp;cependant, il se d\u00e9marque lorsqu&#8217;on s&#8217;attend \u00e0 disposer d&#8217;un grand nombre de services Web, car comme il s&#8217;agit d&#8217;un service centralis\u00e9, son administration est plus facile \u00e0 appliquer \u00e0 tous les niveaux.&nbsp;<\/p>\n\n\n\n<p>Quel flux d&#8217;autorisation doit \u00eatre utilis\u00e9&nbsp;?&nbsp;:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.1.5. Authentification et autorisation avec OpenID Connect<\/em><\/strong><\/h4>\n\n\n\n<p>OpenID Connect (OIDC) remplace OpenID2 et est un protocole qui augmente le protocole OAuth2 en ajoutant des donn\u00e9es d&#8217;identit\u00e9 utilisateur stock\u00e9es dans des jetons sign\u00e9s (JWT);&nbsp;cela lui permet d&#8217;offrir \u00e0 la fois l&#8217;authentification et l&#8217;autorisation,&nbsp;<\/p>\n\n\n\n<p>c&#8217;est pourquoi il est consid\u00e9r\u00e9 comme plus complet.<\/p>\n\n\n\n<p>OpenID Connect est bas\u00e9 sur le concept d&#8217;un fournisseur d&#8217;identit\u00e9 de confiance, qui est charg\u00e9 de fournir un ensemble d&#8217;attributs qui identifient de mani\u00e8re unique les utilisateurs et qui permettent aux applications clientes de s&#8217;appuyer sur l&#8217;authentification pour v\u00e9rifier un utilisateur.&nbsp;Cela \u00e9limine le besoin pour les services de conna\u00eetre ou de stocker les informations d&#8217;identification de l&#8217;utilisateur final.<\/p>\n\n\n\n<p>OpenID Connect utilise des messages JSON sur HTTPS et est recommand\u00e9 par rapport aux versions pr\u00e9c\u00e9dentes d&#8217;OpenID qui ont \u00e9t\u00e9 marqu\u00e9es comme obsol\u00e8tes.&nbsp;Plus de d\u00e9tails sur la norme sont&nbsp;<a href=\"http:\/\/openid.net\/connect\/faq\/\">disponibles sur ce lien<\/a><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"\"><tbody><tr><td>&nbsp;<\/td><td>\n<strong>SAML 2.0<\/strong>\n<\/td><td>\n<strong>OAUTH 2.0<\/strong>\n<\/td><td>\n<strong>Connexion OpenID<\/strong>\n<\/td><\/tr><tr><td>\nQu&#8217;est que c\u2019est ?\n<\/td><td>\nNorme ouverte pour l&#8217;authentification et l&#8217;autorisation\n<\/td><td>\nNorme ouverte \u00e0 autoriser\n<\/td><td>\nNorme ouverte qui ajoute l&#8217;authentification \u00e0 OAUTH2.0\n<\/td><\/tr><tr><td>\nHistoire\n<\/td><td>\nD\u00e9velopp\u00e9 par OASIS en 2001\n<\/td><td>\nD\u00e9velopp\u00e9 par Twitter et Google en 2004\n<\/td><td>\nD\u00e9velopp\u00e9 par la Fondation OpenID en 2014\n<\/td><\/tr><tr><td>\nUtilisation principale\n<\/td><td>\nSSO d&#8217;application client\/serveur\n<\/td><td>\nAutoriser les services Web \/ API\n<\/td><td>\nSSO pour les utilisateurs finaux\n<\/td><\/tr><tr><td>\nFormat\n<\/td><td>\nSOAP\/XML\n<\/td><td>\nSOAP \/ XML &#8211; REST \/ JSON\n<\/td><td>\nREST \/ JSON\n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.1.6 Recommandations g\u00e9n\u00e9rales.<\/em><\/strong><\/h4>\n\n\n\n<p>Si l\u2019administration, l\u2019entit\u00e9 ou une organisation ne dispose pas d&#8217;un m\u00e9canisme d&#8217;authentification et d&#8217;autorisation d\u00e9j\u00e0 d\u00e9fini, il est recommand\u00e9 d&#8217;utiliser au minimum l&#8217;authentification mutuelle TLS avec JWT pour les services REST et BASIC pour SOAP (On a besoin donc d\u2019une plateforme tel que X-Road pour faciliter l\u2019utilisation).<\/p>\n\n\n\n<p>Si l&#8217;\u00e9tablissement dispose d\u00e9j\u00e0 d&#8217;un m\u00e9canisme d&#8217;authentification et d&#8217;autorisation (ex&nbsp;: X-Road, API Manager), il est recommand\u00e9 de maintenir ce m\u00e9canisme et de n&#8217;effectuer que des actions de documentation et d&#8217;accompagnement de son fonctionnement.<\/p>\n\n\n\n<p>La mise en \u0153uvre d&#8217;OAuth2 ou d&#8217;OpenID Connect est recommand\u00e9e \u00e0 court et moyen terme.&nbsp;Il est sugg\u00e9r\u00e9 d&#8217;utiliser un m\u00e9canisme d&#8217;authentification et d&#8217;autorisation centralis\u00e9 pour les services Web, ceci afin d&#8217;\u00e9viter la complexit\u00e9 administrative \u00e0 long terme.<\/p>\n\n\n\n<p>Il est n\u00e9cessaire de s&#8217;assurer que les fonctions administratives d&#8217;authentification et d&#8217;autorisation du service web ne sont accessibles que par les administrateurs du service et non par les consommateurs.<\/p>\n\n\n\n<p>Pour REST, il est sugg\u00e9r\u00e9 d&#8217;impl\u00e9menter une couche d\u2019\u00e9change s\u00e9curis\u00e9e (X-Road security server).&nbsp;Cela permet de l&#8217;appliquer de mani\u00e8re transversale \u00e0 tous les services Web (\u00e0 la fois l\u2019authentification, l\u2019autorisation, signature des transactions et d\u2019horodatage), en plus de fournir d&#8217;autres m\u00e9canismes de contr\u00f4le tels que les listes d&#8217;acc\u00e8s, les journaux, les limites de requ\u00eates, etc.&nbsp;<\/p>\n\n\n\n<p>Si la nature du service est transactionnelle, il est n\u00e9cessairement recommand\u00e9 d&#8217;appliquer un m\u00e9canisme d&#8217;autorisation (d\u2019horodatage, non r\u00e9pudiation etc\u2026). La plateforme X-Road supporte tr\u00e8s bien ce genre de m\u00e9canisme d\u2019autorisation.<\/p>\n\n\n\n<p>Il est recommand\u00e9 de r\u00e9aliser un inventaire des vuln\u00e9rabilit\u00e9s techniques concernant la mise en \u0153uvre du type d&#8217;authentification et d&#8217;autorisation adopt\u00e9 avant le d\u00e9ploiement en production.&nbsp;Ces vuln\u00e9rabilit\u00e9s peuvent correspondre au type de cryptage utilis\u00e9, \u00e0 la gestion des mots de passe, entre autres.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>II.3.2 Int\u00e9grit\u00e9.<\/strong><\/h3>\n\n\n\n<p>Habituellement, les m\u00eames protocoles de transmission de donn\u00e9es garantissent l&#8217;int\u00e9grit\u00e9 mais uniquement au niveau du transport (transport d\u2019information), cela ne suffit pas toujours lors de la mise en \u0153uvre d&#8217;un service Web, car il est seulement garanti que les informations n&#8217;ont pas \u00e9t\u00e9 alt\u00e9r\u00e9es dans le canal, bien qu&#8217;elles puissent avoir \u00e9t\u00e9 alt\u00e9r\u00e9es ult\u00e9rieurement par d&#8217;autres processus.<\/p>\n\n\n\n<p>Les services Web doivent garantir &#8220;l&#8217;exactitude&#8221; et &#8220;l&#8217;exhaustivit\u00e9&#8221; des donn\u00e9es en utilisant des m\u00e9canismes tels que la signature \u00e9lectronique, qui \u00e9vitent l&#8217;alt\u00e9ration des donn\u00e9es \u00e0 la fois dans le canal et dans le lieu o\u00f9 elles seront trait\u00e9es ou stock\u00e9es.<\/p>\n\n\n\n<p>Les m\u00e9canismes qui garantissent l&#8217;int\u00e9grit\u00e9 des donn\u00e9es sont d\u00e9taill\u00e9s ci-dessous :<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.2.1. Registre centralis\u00e9 des hachages.<\/em><\/strong><\/h4>\n\n\n\n<p>Une base de donn\u00e9es centralis\u00e9e peut \u00eatre utilis\u00e9e pour garantir l&#8217;int\u00e9grit\u00e9 des messages.&nbsp;Cela se fait en distribuant un r\u00e9sum\u00e9 (hachage) des donn\u00e9es \u00e9chang\u00e9es \u00e0 une base de donn\u00e9es de confiance o\u00f9 elles sont stock\u00e9es.&nbsp;Avec ces r\u00e9sum\u00e9s, l&#8217;heure (horodatage) est stock\u00e9e afin de v\u00e9rifier quand une demande a \u00e9t\u00e9 faite.<\/p>\n\n\n\n<p>Il est n\u00e9cessaire que cette base de donn\u00e9es soit accessible aux institutions participantes (s\u00e9curit\u00e9 serveur de X-Road, etc..) afin que chacun puisse en obtenir le soutien, s&#8217;il le souhaite.<\/p>\n\n\n\n<p>Ce moyen de v\u00e9rification de l&#8217;int\u00e9grit\u00e9 ne sera utilis\u00e9 que si les institutions qui demandent l&#8217;\u00e9change de donn\u00e9es \u00e9tablissent un accord entre elles (Contrat ou convention, ou \u00e9galement le respect de certaines proc\u00e9dures), o\u00f9 elles acceptent la validit\u00e9 dudit enregistrement.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.2.2. Signature \u00e9lectronique.<\/em><\/strong><\/h4>\n\n\n\n<p>La signature \u00e9lectronique associe le signataire \u00e0 un document (un message en interop\u00e9rabilit\u00e9 ou transaction) assurant l&#8217;authenticit\u00e9, l&#8217;int\u00e9grit\u00e9 et la non-r\u00e9pudiation.<\/p>\n\n\n\n<p>La signature \u00e9lectronique fait partie d&#8217;une infrastructure appel\u00e9e PKI (Public Key Infrastructure ou Infrastructure \u00e0 cl\u00e9 publique) qui permet d&#8217;identifier un certificat num\u00e9rique avec l&#8217;institution d&#8217;une personne ou d&#8217;une institution.&nbsp;Avec ce m\u00e9canisme, il est possible de v\u00e9rifier si les informations ont \u00e9t\u00e9 modifi\u00e9es, m\u00eame si un seul caract\u00e8re a \u00e9t\u00e9 modifi\u00e9.<\/p>\n\n\n\n<p>Il est m\u00eame possible d&#8217;avoir sa propre infrastructure PKI, si toutes les institutions concern\u00e9es en acceptent la validit\u00e9 (CA priv\u00e9, m\u00eame open source).<\/p>\n\n\n\n<p>Pour r\u00e9aliser l&#8217;interop\u00e9rabilit\u00e9 entre les parties, il est n\u00e9cessaire qu&#8217;elles \u00e9changent les cl\u00e9s publiques, en conservant les cl\u00e9s priv\u00e9es en lieu s\u00fbr (ceci uniquement s&#8217;il s&#8217;agit de certificats auto-sign\u00e9s, car si les certificats sont g\u00e9n\u00e9r\u00e9s par un \u00c9tablissement Public de Certification, il est charg\u00e9 de v\u00e9rifier les cl\u00e9s).<\/p>\n\n\n\n<p>Les certificats pour effectuer la signature \u00e9lectronique entre serveurs peuvent \u00eatre obtenus de plusieurs mani\u00e8res.&nbsp;Ci-dessous nous d\u00e9taillons les plus utilis\u00e9s :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Avec une Institution Publique de Certification (CA ou Certificate Authority) : l\u2019institution aupr\u00e8s de laquelle on se rend pour obtenir des certificats num\u00e9riques afin de les utiliser dans l&#8217;\u00e9change de donn\u00e9es.&nbsp;<\/li><li>Avec les certificats auto-sign\u00e9s : dans ce cas, les certificats sont g\u00e9n\u00e9r\u00e9s par les institutions qui souhaitent \u00e9changer des donn\u00e9es.&nbsp;L&#8217;\u00e9change de cl\u00e9s publiques peut s&#8217;effectuer par tout moyen entre les parties ;&nbsp;cependant, pour lui donner un caract\u00e8re l\u00e9gal, l&#8217;\u00e9change de cl\u00e9s peut \u00eatre effectu\u00e9 devant un notaire de foi publique.<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.2.3 Horodatage.<\/em><\/strong><\/h4>\n\n\n\n<p>L&#8217;horodatage est utilis\u00e9 pour sp\u00e9cifier le moment auquel la signature \u00e9lectronique a \u00e9t\u00e9 appliqu\u00e9e.&nbsp;G\u00e9n\u00e9ralement, l&#8217;horodatage fait partie de l&#8217;infrastructure PKI et l&#8217;autorit\u00e9 d&#8217;horodatage est appel\u00e9e TSA (Time Stamping Authority).<\/p>\n\n\n\n<p>L&#8217;horodatage indique que le contenu sign\u00e9 num\u00e9riquement existait \u00e0 un moment donn\u00e9 et n&#8217;a pas chang\u00e9 depuis.&nbsp;Sans l&#8217;existence d&#8217;un horodatage, il n&#8217;est pas possible de savoir quand la Signature \u00e9lectronique a \u00e9t\u00e9 utilis\u00e9e ou si elle a \u00e9t\u00e9 appliqu\u00e9e avec un certificat valide au moment de la signature.<\/p>\n\n\n\n<p>Il est sugg\u00e9r\u00e9 d&#8217;utiliser l&#8217;horodatage en conjonction avec la signature \u00e9lectronique, car il permet de savoir quand les donn\u00e9es ont \u00e9t\u00e9 sign\u00e9es, si cela a \u00e9t\u00e9 fait avec un mot de passe valide ou si l&#8217;information est r\u00e9cente.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.2.4 Blockchain (Encha\u00eenement de blocs).<\/em><\/strong><\/h4>\n\n\n\n<p>La blockchain est un enregistrement public dans l&#8217;ordre chronologique des transactions qui ont lieu.&nbsp;Cette cha\u00eene est partag\u00e9e entre les utilisateurs, ce qui permet de v\u00e9rifier qu&#8217;un \u00e9v\u00e9nement s&#8217;est produit, garantissant l&#8217;int\u00e9grit\u00e9.&nbsp;En d&#8217;autres termes, il s&#8217;agit d&#8217;un registre de transactions d\u00e9centralis\u00e9 et distribu\u00e9, o\u00f9 chaque client peut avoir sa propre copie, ce qui \u00e9vite les modifications par des tiers.<\/p>\n\n\n\n<p>En interop\u00e9rabilit\u00e9, il pourrait \u00eatre utilis\u00e9 en g\u00e9n\u00e9rant un r\u00e9sum\u00e9 (hash bas\u00e9 sur une fonction appel\u00e9 hachage cryptographique qui est utilis\u00e9 \u00e9galement par la plateforme ou technologie X-Road) du message qui contient les donn\u00e9es \u00e0 \u00e9changer et en ins\u00e9rant ce r\u00e9sum\u00e9 dans la cha\u00eene de blocs, qui lorsqu&#8217;il est distribu\u00e9 est tr\u00e8s difficile \u00e0 alt\u00e9rer.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.2.5 Recommandations g\u00e9n\u00e9rales.<\/em><\/strong><\/h4>\n\n\n\n<p>L&#8217;utilisation de la signature \u00e9lectronique est recommand\u00e9e dans tous les services Web qui \u00e9changent des donn\u00e9es sensibles ou donn\u00e9es de l\u2019\u00e9tat, compte tenu de la complexit\u00e9 que cela implique.<\/p>\n\n\n\n<p>Si la signature \u00e9lectronique doit \u00eatre utilis\u00e9e, il convient d&#8217;\u00e9tablir des m\u00e9canismes s\u00e9curis\u00e9s pour l&#8217;\u00e9change de cl\u00e9s publiques entre les institutions (si n\u00e9cessaire) et le stockage des cl\u00e9s priv\u00e9es dans un endroit s\u00fbr, garantissant ainsi l&#8217;int\u00e9grit\u00e9 des donn\u00e9es et emp\u00eachant les cl\u00e9s sont perdues en cas d&#8217;\u00e9ventualit\u00e9.&nbsp;Il est \u00e9galement n\u00e9cessaire de v\u00e9rifier que les certificats n&#8217;ont pas expir\u00e9 et qu&#8217;ils n&#8217;ont pas \u00e9t\u00e9 r\u00e9voqu\u00e9s (n\u00e9cessit\u00e9 d\u2019utilisation de l\u2019OCSP).<\/p>\n\n\n\n<p>Dans SOAP, il est sugg\u00e9r\u00e9 d&#8217;utiliser une signature XML selon le W3C ou WS-Security;&nbsp;dans REST, le JWS RFC 7515 (JSON Web Signature) pour la signature JSON.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>II.3.3 Confidentialit\u00e9.<\/strong><\/h3>\n\n\n\n<p>Lorsque les donn\u00e9es circulent d&#8217;un endroit \u00e0 un autre, plusieurs fois par plusieurs interm\u00e9diaires, il faut \u00e9viter qu&#8217;elles soient comprises par des tiers ;&nbsp;de plus, il est n\u00e9cessaire que ces donn\u00e9es ne soient pas compr\u00e9hensibles par les administrateurs d&#8217;infrastructure (ex&nbsp;: l\u2019autorit\u00e9 de gouvernance) et autres ayant acc\u00e8s au m\u00eame service web.&nbsp;La m\u00e9thode la plus courante pour garder les donn\u00e9es confidentielles est le cryptage (ex&nbsp;: il faut utiliser le protocole HTTPS).<\/p>\n\n\n\n<p>Le cryptage est le processus de conversion des donn\u00e9es dans un format qui n&#8217;est pas lisible par des tiers non autoris\u00e9s (tiers observant le canal de transmission, administrateurs de services Web ou autres).&nbsp;Les donn\u00e9es ne peuvent \u00eatre comprises que par ceux qui ont la cl\u00e9 pour les d\u00e9chiffrer.<\/p>\n\n\n\n<p>Les m\u00e9thodes utilis\u00e9es pour le chiffrement sont sym\u00e9triques et asym\u00e9triques, que nous d\u00e9taillons ci-dessous :<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.3.1 Cryptage sym\u00e9trique.<\/em><\/strong><\/h4>\n\n\n\n<p>Le cryptage sym\u00e9trique est effectu\u00e9 avec une cl\u00e9 secr\u00e8te et il est s\u00fbr tant que cette cl\u00e9 est conserv\u00e9e en bonne garde.&nbsp;En interop\u00e9rabilit\u00e9, il suffit que les parties \u00e9changent la cl\u00e9 de mani\u00e8re s\u00e9curis\u00e9e pour \u00e9tablir une communication avec un niveau de cryptage acceptable et \u00e0 un co\u00fbt de calcul (temps de traitement) assez faible.<\/p>\n\n\n\n<p>L&#8217;algorithme le plus utilis\u00e9 pour effectuer le chiffrement sym\u00e9trique est AES (Advanced Encryption Standard ou standard de chiffrement avanc\u00e9), qui est assez efficace et consomme peu de ressources lors du traitement.&nbsp;Il peut \u00eatre utilis\u00e9 avec des cl\u00e9s de longueur 128, 192, 256 ou d&#8217;un plus grand nombre de bits, la plus grande diff\u00e9rence entre celles-ci \u00e9tant le temps de d\u00e9cryptage des donn\u00e9es.<\/p>\n\n\n\n<p>L&#8217;un des principaux inconv\u00e9nients de ce type de cryptage est l&#8217;\u00e9change de la cl\u00e9, qui devient un risque lorsqu&#8217;elle n&#8217;est plus secr\u00e8te (toute personne en possession de la cl\u00e9 peut d\u00e9chiffrer les donn\u00e9es).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.3.2 Cryptage asym\u00e9trique.<\/em><\/strong><\/h4>\n\n\n\n<p>Le chiffrement asym\u00e9trique utilise deux cl\u00e9s : une pour le chiffrement et une pour le d\u00e9chiffrement.&nbsp;Une cl\u00e9 publique est utilis\u00e9e pour appliquer le chiffrement et une cl\u00e9 priv\u00e9e est utilis\u00e9e pour d\u00e9chiffrer les donn\u00e9es (le d\u00e9chiffrement des donn\u00e9es ne peut se faire qu&#8217;avec la cl\u00e9 priv\u00e9e).<\/p>\n\n\n\n<p>Dans ce type de cryptage, il n&#8217;est pas n\u00e9cessaire d&#8217;\u00e9changer les cl\u00e9s, \u00e9vitant ainsi le probl\u00e8me de la distribution des cl\u00e9s.<\/p>\n\n\n\n<p>L&#8217;utilisation de RSA avec une longueur de cl\u00e9 minimale de 2048 est recommand\u00e9e (on utilise actuellement le longueur 4096 actuellement qui est d\u00e9j\u00e0 install\u00e9 dans notre datacenter AWS).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>II.3.3.3 Recommandations g\u00e9n\u00e9rales.<\/em><\/strong><\/h4>\n\n\n\n<p>En aucun cas, il n&#8217;est conseill\u00e9 de mettre en \u0153uvre notre propre algorithme de cryptage.<\/p>\n\n\n\n<p>Il est recommand\u00e9 d&#8217;utiliser le cryptage sym\u00e9trique chaque fois qu&#8217;il n&#8217;est pas sur un canal s\u00e9curis\u00e9 (TLS ou VPN) pour emp\u00eacher les tiers de comprendre les donn\u00e9es envoy\u00e9es.<\/p>\n\n\n\n<p>Il est \u00e9galement recommand\u00e9 d&#8217;utiliser un cryptage asym\u00e9trique si les donn\u00e9es \u00e0 \u00e9changer sont sensibles et ne peuvent \u00eatre connues que par des utilisateurs sp\u00e9cifiques.<\/p>\n\n\n\n<p>En g\u00e9n\u00e9ral, si une s\u00e9curit\u00e9 des donn\u00e9es plus \u00e9lev\u00e9e est requise, il est sugg\u00e9r\u00e9 d&#8217;utiliser un cryptage asym\u00e9trique (RSA).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>II.3.4 Le journal d\u2019Audit.<\/strong><\/h3>\n\n\n\n<p>Le journal d&#8217;audit est l&#8217;examen et la v\u00e9rification des actions men\u00e9es pour reconstituer une s\u00e9rie d&#8217;\u00e9v\u00e9nements qui ont g\u00e9n\u00e9r\u00e9 un \u00e9v\u00e9nement sp\u00e9cifique.&nbsp;Le moyen le plus courant d&#8217;effectuer cela consiste \u00e0 utiliser des journaux d&#8217;\u00e9v\u00e9nements sur des serveurs s\u00e9curis\u00e9s et accessibles uniquement par le personnel autoris\u00e9.<\/p>\n\n\n\n<p>Il est recommand\u00e9 de toujours utiliser les journaux d&#8217;\u00e9v\u00e9nements avec autant d&#8217;informations que possible (Principe de base de l\u2019e-Gouvernance \u00e0 propos de la transparence).&nbsp;Dans ce cadre, ils doivent contenir au minimum : des informations temporaires, des informations sur l&#8217;application qui enregistre l&#8217;\u00e9v\u00e9nement, qui r\u00e9alise l&#8217;\u00e9v\u00e9nement (donn\u00e9es client qui n\u00e9cessite un syst\u00e8me de journalisation), le type d&#8217;\u00e9v\u00e9nement qui a eu lieu et la demande et la r\u00e9ponse du service.<\/p>\n\n\n\n<p>Les informations client sensibles (mot de passe par exemple), les chemins de fichiers ou les cha\u00eenes de connexion \u00e0 la base de donn\u00e9es ne doivent pas \u00eatre inclus dans les journaux d&#8217;\u00e9v\u00e9nements, car cela constitue un risque de s\u00e9curit\u00e9.<\/p>\n\n\n\n<p>Les actions correctives qui ont \u00e9t\u00e9 prises en cas d&#8217;\u00e9v\u00e9nement affectant le service doivent \u00eatre document\u00e9es dans des rapports, de sorte que si les m\u00eames \u00e9v\u00e9nements se r\u00e9p\u00e8tent, ils peuvent \u00eatre facilement r\u00e9solus.<\/p>\n\n\n\n<p>Il est recommand\u00e9 d&#8217;utiliser un centralisateur de journaux d&#8217;\u00e9v\u00e9nements pour faciliter son administration et son analyse ult\u00e9rieure (X-Road monitoring, ELK qu\u2019on a d\u00e9j\u00e0 propos\u00e9, Apache Kafka ou autre).<\/p>\n\n\n\n<p>On peut \u00e9galement effectuer le journal d\u2019audit avec le registre centralis\u00e9 des hachages si ce m\u00e9canisme a \u00e9t\u00e9 mis en place;&nbsp;voir point (registre de hachage centralis\u00e9 : d\u00e9j\u00e0 disponible dans X-Road).<\/p>\n\n\n\n<p>De plus, des technologies de synchronisation d&#8217;horloge syst\u00e8me (NTP) peuvent \u00eatre utilis\u00e9es afin de permettre un suivi chronologique des \u00e9v\u00e9nements.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\n<strong>Annexes.<\/strong>\n<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>III.1 Types de formats de repr\u00e9sentation des donn\u00e9es.<\/strong><\/h2>\n\n\n\n<p>Les principaux types de formats de donn\u00e9es pour repr\u00e9senter les informations dans un service d\u2019interop\u00e9rabilit\u00e9 sont JSON et XML, et ils sont d\u00e9taill\u00e9s ci-dessous&nbsp;:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>III.1.1. JSON (JavaScript Object Notation ou JavaScript Object Notation).<\/strong><\/h3>\n\n\n\n<p>Il s\u2019agit d\u2019un format de repr\u00e9sentation de donn\u00e9es l\u00e9ger, simple \u00e0 lire et \u00e0 comprendre \u00e0 la fois par les humains et les machines.&nbsp;C\u2019est le principal type de format de donn\u00e9es pour l\u2019\u00e9change d\u2019informations dans un service d\u2019interop\u00e9rabilit\u00e9 REST et, dans sa forme la plus simple, il se caract\u00e9rise par l\u2019utilisation d\u2019une collection de paires nom\/valeur pouvant \u00eatre imbriqu\u00e9es.&nbsp;Sa structure est illustr\u00e9e ci-dessous :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br>\"nom1\": \"valeur1\", \/\/ paire nom\/valeur<br>\"nom1\": \"valeur2\",<br>\"nom3\": {<br>\"nom4\": \"valeur4\",<br>\"nom5\": [\"valeur1\", \"valeur2\"]\/\/ paire nom\/valeur, dont les valeurs sont des collections \/\/(array)<br>}<br>}<\/pre>\n\n\n\n<p>A titre d\u2019exemple, l\u2019objet \u00ab personne \u00bb est d\u00e9crit au format JSON :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br>\"Id\": \"12345678-9\",<br>\"prenoms\": \"Juan\",<br>\"nom\": \"Perez Gomez\",<br>\"dateDeNaissance\": \"22\/05\/2017\"<br>}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>III.1.2. XML (langage de balisage extensible ou langage de balisage extensible).<\/strong><\/h3>\n\n\n\n<p>Il s\u2019agit d\u2019un format de repr\u00e9sentation de donn\u00e9es flexible qui d\u00e9finit un ensemble de r\u00e8gles pour former des documents compr\u00e9hensibles par les humains et les machines.&nbsp;Ce format de type de donn\u00e9es est g\u00e9n\u00e9ralement utilis\u00e9 avec les services d\u2019interop\u00e9rabilit\u00e9 SOAP, bien qu\u2019il soit \u00e9galement possible de l\u2019utiliser avec un service d\u2019interop\u00e9rabilit\u00e9 REST.<\/p>\n\n\n\n<p>La structure du document XML doit contenir la d\u00e9claration qui pr\u00e9cise la version (version) et l\u2019encodage (encodage) du document, ceci afin d\u2019am\u00e9liorer l\u2019interop\u00e9rabilit\u00e9 des donn\u00e9es (conna\u00eetre la version et l\u2019encodage \u00e9vite les erreurs d\u2019interpr\u00e9tation).<\/p>\n\n\n\n<p>A titre d\u2019exemple, l\u2019objet \u00ab personne \u00bb est d\u00e9taill\u00e9 au format XML :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">< ? xml version = \" 1.0 \" encodage = \" UTF-8 \" ? ><br><br>< personne ><br>< Id >012345678-9<\/ Id ><br>< nom > Juan <\/ nom ><br>< prenoms > Perez Gomez <\/ prenoms ><br>< dateDeNaissance > 22\/05\/2017 <\/ dateDeNaissance ><br><\/ personne ><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>III.2. Types de services Web et API\u2019s.<\/strong><\/h2>\n\n\n\n<p>Au moment de la r\u00e9daction, les types de services Web et API\u2019s les plus couramment utilis\u00e9s lors de la mise en \u0153uvre d\u2019un processus d\u2019interop\u00e9rabilit\u00e9 sont REST et SOAP.&nbsp;Voici les d\u00e9finitions et les principales caract\u00e9ristiques de chacun :<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>III.2.1. REST<\/strong><\/h3>\n\n\n\n<p>REST est un style d\u2019architecture pour les syst\u00e8mes distribu\u00e9s et, bien qu\u2019il ne d\u00e9pende d\u2019aucun protocole, il est principalement utilis\u00e9 en dessus de HTTP.&nbsp;Ce style d\u2019architecture d\u00e9finit un ensemble de principes pour sa mise en \u0153uvre :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Interface uniforme.&nbsp;Toutes les ressources sont identifi\u00e9es par un URI.<\/li><li>Interactions sans stockage d\u2019\u00e9tat (stateless).&nbsp;Chaque message contient suffisamment d\u2019informations pour \u00eatre trait\u00e9 sans qu\u2019il soit n\u00e9cessaire d\u2019enregistrer un \u00e9tat sur le serveur \u00e0 partir des messages pr\u00e9c\u00e9dents.<\/li><li>Permet l\u2019utilisation du cache.&nbsp;Les r\u00e9ponses peuvent \u00eatre mises en cache ou non par le client pour optimiser les requ\u00eates.<\/li><li>C\u2019est une architecture client-serveur.&nbsp;Le serveur ne conna\u00eet pas les clients qui s\u2019y connectent.&nbsp;Les deux parties peuvent se d\u00e9velopper ind\u00e9pendamment.<\/li><li>Architecture en couches.&nbsp;Le client ne sait pas s\u2019il est connect\u00e9 directement au service, \u00e0 un cache ou \u00e0 toute autre couche interm\u00e9diaire.<\/li><\/ul>\n\n\n\n<p>Le service bas\u00e9 sur ces principes est appel\u00e9 RESTful.<\/p>\n\n\n\n<p>Bien que techniquement un service REST puisse transf\u00e9rer des informations dans n\u2019importe quel format, il est recommand\u00e9 d\u2019utiliser JSON pour l\u2019\u00e9change de donn\u00e9es.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.1. Les bonnes pratiques.<\/em><\/strong><\/h4>\n\n\n\n<p>Pour maintenir une coh\u00e9rence dans le d\u00e9veloppement des services REST, il est sugg\u00e9r\u00e9 de mettre en \u0153uvre les bonnes pratiques suivantes :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Avoir une gestion des r\u00e9ponses de type JSON par d\u00e9faut, et seulement si n\u00e9cessaire, d\u2019autres types de contenu (XML, CSV ou autre).<\/li><li>Pour indiquer le format de r\u00e9ponse, utilisez le champ content-type.&nbsp;<\/li><li>Par exemple :\n<ul><li>&nbsp;XML : Content-Type : application\/xml&nbsp;&nbsp;<\/li><li>JSON : Content-Type : application\/json ;<\/li><li>&nbsp;Encoding character = utf-8<\/li><\/ul>\n<\/li><li>Un URI (Uniform Resource Identifier) \u200b\u200bidentifie une ressource&nbsp;;<\/li><li>Les URI sont des noms ou des noms au pluriel et en minuscules, pas des verbes.<\/li><li>Utilisez les verbes du protocole HTTP car il g\u00e8re les actions correspondant \u00e0 CRUD (GET, POST, PATCH, PUT, DELETE, ou autres).<\/li><li>Mettez le num\u00e9ro de version dans l\u2019URL,&nbsp;<\/li><\/ul>\n\n\n\n<p>par exemple&nbsp;:&nbsp;<a href=\"http:\/\/example-digital.gov.mg\/api\/v1.0\/resource-name\">http:\/\/example-digital.gov.mg\/api\/v1.0\/resource-name<\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Utilisez la notation \u00ab chameau \u00bb (camelCase), qui consiste \u00e0 \u00e9crire des phrases compos\u00e9es de sorte que chaque mot au milieu de la phrase commence par une majuscule (par exemple, phraseInCamelCase).&nbsp;Utilisez cette notation pour nommer les ressources, les attributs et les param\u00e8tres.<\/li><li>Utilisez des mots et pas de verbes dans votre URL. Exemple : pour r\u00e9cup\u00e9rer la liste des utilisateurs, utilisez \/users et non \/getusers<\/li><li>Utilisez l\u2019anglais pour nommer vos ressources. L\u2019informatique est un monde principalement anglophone, si vous souhaitez fournir des API universelles, la langue de Shakespeare s\u2019impose d\u2019elle-m\u00eame.<\/li><li>Utiliser le pluriel pour nommer vos ressources. Lorsque l\u2019URL se rapporte \u00e0 un groupe de ressources (ici nous parlons bien de plusieurs utilisateurs et non pas d\u2019un seul), le pluriel s\u2019impose pour indiquer aux d\u00e9veloppeurs que l\u2019URL se rapporte \u00e0 un \u00ab tableau \u00bb de ressources.<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.2 Structures d\u2019URI valides<\/em><\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>Liste des services :&nbsp;\n<ul><li>GET&nbsp;http:\/\/www.digital.gov.mg \/api\/v1.0\/services<\/li><\/ul>\n<\/li><li>Liste des services de filtrage avec cha\u00eene de requ\u00eate :\n<ul><li>&nbsp;GET&nbsp;http:\/\/www. digital.gov.mg \/api\/v1.0\/services?annee=2016&#038;order=desc<\/li><\/ul>\n<\/li><li>Rechercher un service par identifiant (1234):&nbsp;\n<ul><li>GET&nbsp;http:\/\/www.digital.gov.mg \/api\/v1.0\/services\/1234<\/li><\/ul>\n<\/li><li>Recherchez les commentaires du service (1234):&nbsp;<\/li><li>GET&nbsp;http:\/\/www.digital.gov.mg \/api\/v1.0\/services\/1234\/commentaires<\/li><li>Sp\u00e9cifiez les champs facultatifs dans une liste s\u00e9par\u00e9e par des virgules&nbsp;:\n<ul><li>&nbsp;GET&nbsp;http:\/\/www.digital.gov.mg \/api\/v1.0\/services\/1234?campos=name,date<\/li><\/ul>\n<\/li><li>Ajouter un commentaire \u00e0 un service sp\u00e9cifique :&nbsp;\n<ul><li>POST&nbsp;<a href=\"http:\/\/www.digital.gov.mg\/api\/v1.0\/services\/1234\/comment\">http:\/\/www.digital.gov.mg\/api\/v1.0\/services\/1234\/comment<\/a>aires<\/li><\/ul>\n<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.3. Structures d\u2019URI non valides<\/em><\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>Noms singuliers :&nbsp;http:\/\/www.digital.gov.mg \/service<\/li><\/ul>\n\n\n\n<p>Exemple&nbsp;: http:\/\/www.digital.gov.mg \/service\/1234<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Verbe dans l\u2019URI :&nbsp;http:\/\/www.digital.gov.mg \/service\/1234\/create<\/li><li>Filtre en dehors de la cha\u00eene de requ\u00eate&nbsp;http:\/\/www.digital.gov.mg \/service\/2016\/desc<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.4. \u00c9l\u00e9ments d\u2019une liste<\/em><\/strong><\/h4>\n\n\n\n<p>Lorsqu\u2019on consomme cette ressource et n\u2019ajoute pas de filtre de recherche \u00e0 l\u2019URL, le service doit lister tous les \u00e9l\u00e9ments appartenant \u00e0 la ressource en cours de consommation.&nbsp;Afin de ne pas surcharger l\u2019obtention des \u00e9l\u00e9ments, le r\u00e9sultat peut \u00eatre limit\u00e9 en ajoutant une pagination par d\u00e9faut au service, qui peut \u00eatre modifi\u00e9e via des filtres dans l\u2019URL.<\/p>\n\n\n\n<p>GET \/services&nbsp;<\/p>\n\n\n\n<p># HTTP 200 OK<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.5. <\/em><\/strong><strong><em>Filtrer la liste des \u00e9l\u00e9ments<\/em><\/strong><\/h4>\n\n\n\n<p>En utilisant le &#8220;?&#8221;&nbsp;pour filtrer les ressources et &#8220;&#038;&#8221; pour ajouter plus de filtres sur l\u2019URL.<\/p>\n\n\n\n<p>GET \/services?{filtre1}=valeur&#038;{filtreN}=valeur<\/p>\n\n\n\n<p># Fitre par ID de l\u2019entit\u00e9 avec son \u00e9tat&nbsp;<\/p>\n\n\n\n<p>GET \/services?idEntite=2345&#038;etat=enAttente<\/p>\n\n\n\n<p># HTTP 200 OK<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.6. <\/em><\/strong><strong><em>V\u00e9rifier un \u00e9l\u00e9ment<\/em><\/strong><\/h4>\n\n\n\n<p>La requ\u00eate d\u2019un \u00e9l\u00e9ment sp\u00e9cifique doit \u00eatre effectu\u00e9e en envoyant via l\u2019URL le param\u00e8tre qui servira de cl\u00e9 ou d\u2019identifiant de l\u2019\u00e9l\u00e9ment \u00e0 consulter et aucun autre param\u00e8tre de filtre, de pagination ou de classement.<\/p>\n\n\n\n<p>GET \/services\/{id}<\/p>\n\n\n\n<p># Obtention de l\u2019\u00e9l\u00e9ment 12345 du service<\/p>\n\n\n\n<p>GET \/services\/12345<\/p>\n\n\n\n<p># HTTP 200 OK<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.7.&nbsp; <\/em><\/strong><strong><em>Pagination<\/em><\/strong><\/h4>\n\n\n\n<p>Pour les paginations (dans le cas d\u2019une liste avec une grande quantit\u00e9 de donn\u00e9es), il est sugg\u00e9r\u00e9 d\u2019avoir les param\u00e8tres &#8220;page&#8221; (num\u00e9ro de page du premier \u00e9l\u00e9ment \u00e0 retourner par la ressource) et &#8220;elementsParPage&#8221; (quantit\u00e9 de donn\u00e9es \u00e0 retourner par page par ressource) dans l\u2019URL.<\/p>\n\n\n\n<p># Obtention des registes 61 &#8211; 90 (elementsParPage=30 parDefaut)<\/p>\n\n\n\n<p>GET \/services?page=3<\/p>\n\n\n\n<p># HTTP 200 OK<\/p>\n\n\n\n<p># Obtention des registres 21 &#8211; 30<\/p>\n\n\n\n<p>GET \/services?pagina=3&#038;elementsParPage=10<\/p>\n\n\n\n<p># HTTP 200 OK<\/p>\n\n\n\n<p>Si la pagination est utilis\u00e9e, un nombre&nbsp;par d\u00e9faut&nbsp;d\u2019<strong>elementsParPage<\/strong>&nbsp;doit \u00eatre d\u00e9fini&nbsp;(le nombre normalement utilis\u00e9 est de 30 \u00e9l\u00e9ments). De plus, il est sugg\u00e9r\u00e9 d\u2019envoyer \u00e9ventuellement le lien d\u2019en-t\u00eate dans la r\u00e9ponse avec des informations concernant la pagination (\u00ab first \u00bb la premi\u00e8re page, \u00ab prev \u00bb la page pr\u00e9c\u00e9dente, \u00ab next \u00bb la page suivante et \u00ab last \u00bb la derni\u00e8re page).<\/p>\n\n\n\n<p>Lien&nbsp;:&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< https&nbsp;: \/\/ www.digital.gov.mg \/services?limite=20&#038;interval=0 > ; rel = &#8220;first&#8221;,&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< https&nbsp;: \/\/ www.digital.gov.mg \/services?limite=20&#038;interval=40 > ; rel = &#8220;prev&#8221;,&nbsp;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< https: \/\/ www.digital.gov.mg \/services?limite=20&#038;interval=80 > ; rel = &#8220;next&#8221;,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< https: \/\/ www.digital.gov.mg \/services?limite=20&#038;intervalle=180 > ; rel = &#8220;last&#8221;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.8. <\/em><\/strong><strong><em>Order<\/em><\/strong><\/h4>\n\n\n\n<p>Pour trier les ressources, utilisez le param\u00e8tre &#8220;<strong>order<\/strong>&#8221; suivi du nom de l\u2019\u00e9l\u00e9ment selon lequel on souhaite trier ;&nbsp;par d\u00e9faut, les ressources sont tri\u00e9es par ordre croissant.&nbsp;Les \u00e9l\u00e9ments par lesquels il est permis de commander doivent \u00eatre d\u00e9finis dans la documentation technique de la ressource API.<\/p>\n\n\n\n<p>GET \/services?order[element1]=asc|desc&#038;order[elementN]=asc|desc<\/p>\n\n\n\n<p># Tri par \u00e9tat ascendant et descendant ferm\u00e9s<\/p>\n\n\n\n<p>GET \/services?order[etat]=asc&#038;[enregistrementFerme]=desc<\/p>\n\n\n\n<p># HTTP 200 OK<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.9. <\/em><\/strong><strong><em>Limite de requ\u00eate<\/em><\/strong><\/h4>\n\n\n\n<p>Dans le cas de traitement d\u2019une limite de requ\u00eates par client (rate-limiting), il est n\u00e9cessaire d\u2019envoyer un ent\u00eate HTTP suppl\u00e9mentaire dans la r\u00e9ponse, avec des informations sur le nombre de requ\u00eates autoris\u00e9es, le nombre de requ\u00eates restantes et l\u2019heure (timestamp ) dans lequel ces limites reviendront \u00e0 leur \u00e9tat initial.<\/p>\n\n\n\n<p>X-LimitSolicitudes-Limit: 100<\/p>\n\n\n\n<p>X-LimitSolicitudes-Remaining: 14<\/p>\n\n\n\n<p>X-LimitSolicitudes-Reset: 1499875025<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.9. <\/em><\/strong><strong><em>Cr\u00e9ation d\u2019un \u00e9l\u00e9ment<\/em><\/strong><\/h4>\n\n\n\n<p>La cr\u00e9ation d\u2019un \u00e9l\u00e9ment implique l\u2019envoi d\u2019un enregistrement ou d\u2019un ensemble de ceux-ci conformes aux directives \u00e9tablies dans la documentation technique de l\u2019API \u00e0 laquelle ladite action est demand\u00e9e.&nbsp;Le journal parcourt le corps de la demande et l\u2019utilisation du format JSON est recommand\u00e9e pour les valeurs d\u2019entr\u00e9e.<\/p>\n\n\n\n<p>POST \/services<\/p>\n\n\n\n<p># Corps de la requ\u00eate<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[{<br> &nbsp;&nbsp;&nbsp;\"nom\": \"Nom\",<br> &nbsp;&nbsp;&nbsp;\"description\": \"Description de la registre\"<br>}]<\/pre>\n\n\n\n<p># HTTP 201 CREATED<\/p>\n\n\n\n<p>Pour la validation des donn\u00e9es d\u2019entr\u00e9e, l\u2019utilisation de&nbsp;<a href=\"http:\/\/json-schema.org\/\">json-schema<\/a>&nbsp;est recommand\u00e9e.&nbsp;Dans le cas de la m\u00e9thode POST, l\u2019envoi des enregistrements \u00e0 cr\u00e9er doit se faire dans un tableau qu\u2019un ou plusieurs \u00e9l\u00e9ments soient cr\u00e9\u00e9s.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.10. <\/em><\/strong><strong><em>Modifier un \u00e9l\u00e9ment<\/em><\/strong><\/h4>\n\n\n\n<p>Les modifications des enregistrements peuvent \u00eatre effectu\u00e9es via les protocoles PUT ou PATCH, la diff\u00e9rence entre ceux-ci est que PUT met \u00e0 jour tous les champs de l\u2019enregistrement, tandis que PATCH permet de mettre \u00e0 jour un ou plusieurs champs de l\u2019enregistrement.&nbsp;Afin d\u2019effectuer la mise \u00e0 jour, il est n\u00e9cessaire de fournir la cl\u00e9 ou l\u2019identifiant du registre \u00e0 modifier via l\u2019URL.<\/p>\n\n\n\n<p><strong>PUT<\/strong><\/p>\n\n\n\n<p>PUT \/services\/{id}<\/p>\n\n\n\n<p># Corps de la requ\u00eate<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br> &nbsp;&nbsp;&nbsp;\"nom\": \"Nom\",<br> &nbsp;&nbsp;&nbsp;\"description\": \"Description de la registre\"<br>}<\/pre>\n\n\n\n<p># HTTP 200 OK<\/p>\n\n\n\n<p><strong>PATCH&nbsp;<\/strong><\/p>\n\n\n\n<p>PATCH \/services\/{id}<\/p>\n\n\n\n<p># Corps de la requ\u00eate<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br> &nbsp;&nbsp;&nbsp;\"description\": \"Description de la registre\"<br>}<\/pre>\n\n\n\n<p># HTTP 200 OK<\/p>\n\n\n\n<p>Pour la validation des donn\u00e9es d\u2019entr\u00e9e, l\u2019utilisation de&nbsp;<a href=\"http:\/\/json-schema.org\/\">json-schema<\/a>&nbsp;est recommand\u00e9e.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.11. <\/em><\/strong><strong><em>Supprimer un \u00e9l\u00e9ment<\/em><\/strong><\/h4>\n\n\n\n<p>Pour supprimer un enregistrement, il est n\u00e9cessaire de fournir la cl\u00e9 ou l\u2019identifiant de l\u2019enregistrement \u00e0 modifier via l\u2019URL.<\/p>\n\n\n\n<p>DELETE \/services\/{id}<\/p>\n\n\n\n<p># HTTP 204 NO CONTENT<\/p>\n\n\n\n<p>Utilisez les&nbsp;<a href=\"https:\/\/github.com\/egobsv\/EstandaresInteroperabilidad\/blob\/master\/Desarrollo.md#c%C3%B3digos-respuesta-http\">codes HTTP<\/a>&nbsp;correspondants pour r\u00e9pondre aux requ\u00eates faites par le client.<\/p>\n\n\n\n<p>Envisagez de chiffrer les param\u00e8tres envoy\u00e9s dans l\u2019URI s\u2019ils sont sensibles de quelque mani\u00e8re que ce soit.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.12. Validation des messages<\/em><\/strong><\/h4>\n\n\n\n<p>Utilisez JSON Schema pour la validation des messages dans REST comme d\u00e9crit par l\u2019 <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/draft-ietf-httpbis-semantics-16\">IETF16<\/a>.<\/p>\n\n\n\n<p>Le sch\u00e9ma JSON est \u00e9galement d\u00e9crit au format JSON&nbsp;; cependant, il est utilis\u00e9 pour d\u00e9crire la structure d\u2019autres donn\u00e9es.&nbsp;\u00c0 la base, sch\u00e9ma JSON d\u00e9finit les types de donn\u00e9es de base suivants&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>string : utilis\u00e9 pour les cha\u00eenes de texte.<\/li><li>number ou integer: utilis\u00e9s pour d\u00e9finir des valeurs num\u00e9riques, la principale diff\u00e9rence \u00e9tant que &#8220;number&#8221; accepte \u00e0 la fois des nombres entiers et des nombres d\u00e9cimaux, tandis que &#8220;integer&#8221; n\u2019est utilis\u00e9 que pour valider des nombres entiers.<\/li><li>object : utilis\u00e9 pour valider les structures JSON imbriqu\u00e9es (une structure dans une autre).<\/li><li>array : utilis\u00e9 pour d\u00e9finir un ensemble d\u2019\u00e9l\u00e9ments.<\/li><li>boolean : ce type de donn\u00e9es est utilis\u00e9 pour v\u00e9rifier deux valeurs sp\u00e9ciales, true (valeur vraie) et false (valeur fausse).<\/li><li>null &#8211; Cette valeur sp\u00e9ciale est g\u00e9n\u00e9ralement utilis\u00e9e pour repr\u00e9senter l\u2019absence d\u2019une valeur.<\/li><\/ul>\n\n\n\n<p>Il est recommand\u00e9 que chaque objet identifi\u00e9 dans la s\u00e9mantique ait son sch\u00e9ma JSON respectif associ\u00e9 et publi\u00e9.<\/p>\n\n\n\n<p>Par exemple, pour valider la structure JSON, utilisez&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br> &nbsp;&nbsp;&nbsp;&nbsp;\" titre \" : \" Personne \" ,<br> &nbsp;&nbsp;&nbsp;&nbsp;\" type \" : \" objet \" ,<br> &nbsp;&nbsp;&nbsp;&nbsp;\" proprietes \" : {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" id \" : {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" type \" : \" integer\"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" nom \" : {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" type \" : \" string\"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" prenom \" : {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" type \" : \"string \"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" dateDeNaissance \" : {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" type \" : \" string \"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> &nbsp;&nbsp;&nbsp;}<br>}<\/pre>\n\n\n\n<p>Outils de d\u00e9veloppement de sch\u00e9ma JSON&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Exemples de sch\u00e9mas :&nbsp;<a href=\"http:\/\/json-schema.org\/examples.html\">http:\/\/json-schema.org\/examples.html<\/a><\/li><li>Validateur de sch\u00e9ma en ligne&nbsp;:&nbsp;<a href=\"https:\/\/www.jsonschemavalidator.net\/\">https:\/\/www.jsonschemavalidator.net\/<\/a><\/li><li>Validation de sch\u00e9ma JSON pour Java, Python, PHP, Ruby, etc.&nbsp;:&nbsp;<a href=\"http:\/\/json-schema.org\/implementations.html#validators\">http:\/\/json-schema.org\/implementations.html#validators<\/a><\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.12. Gestion des versions.<\/em><\/strong><\/h4>\n\n\n\n<p>La gestion des versions est appliqu\u00e9e \u00e0 l\u2019URL.&nbsp;On peut avoir jusqu\u2019\u00e0 deux versions en m\u00eame temps.<\/p>\n\n\n\n<p>GET \/v1\/services<\/p>\n\n\n\n<p>GET \/v2\/services<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.13. Gestion des erreurs.<\/em><\/strong><\/h4>\n\n\n\n<p>Tous les probl\u00e8mes que pr\u00e9sentent les services d\u2019interop\u00e9rabilit\u00e9 doivent \u00eatre identifi\u00e9s, afin que l\u2019entit\u00e9 consommatrice de ceux-ci comprenne les raisons des \u00e9checs.<\/p>\n\n\n\n<p>Pour la gestion des erreurs, il est recommand\u00e9 d\u2019utiliser la structure JSON minimale suivante&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br> &nbsp;&nbsp;&nbsp;&nbsp;\" code \" : \" Code d\u2019erreur\"&nbsp;,<br> &nbsp;&nbsp;&nbsp;&nbsp;\" erreur \" : \" Description d\u00e9taill\u00e9e de l\u2019erreur \"&nbsp;<br>}<\/pre>\n\n\n\n<p>En cas de nombreuses erreurs, la structure JSON suivante peut \u00eatre utilis\u00e9e&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br> &nbsp;&nbsp;&nbsp;\"code\": \"Code d\u2019erreur\",<br>&nbsp;&nbsp;&nbsp;&nbsp;\"error\": \" Description d\u00e9taill\u00e9e de l'erreur \",<br> &nbsp;&nbsp;&nbsp;\"errors\": [<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"code\": \" Identifiant du contexte de l'erreur \",<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"error\": \" Description d\u00e9taill\u00e9e de l'erreur \"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"code\": \" Identifiant du contexte de l'erreur \",<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"error\": \" Description d\u00e9taill\u00e9e de l'erreur \"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<br> &nbsp;&nbsp;&nbsp;]<br>}<\/pre>\n\n\n\n<p>Par exemple, dans un service d\u2019insertion de documents qui se fait en masse et qui a pr\u00e9sent\u00e9 une erreur, la r\u00e9ponse attendue est :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br> &nbsp;&nbsp;&nbsp;&nbsp;\" code \" : \" 0003 \" ,<br> &nbsp;&nbsp;&nbsp;&nbsp;\" error \" : \" Erreur dans le traitement de l\u2019insertion de masse des services \" ,<br> &nbsp;&nbsp;&nbsp;&nbsp;\" errors \" : [<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" code \" : 1568548 ,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" error \" : \" Le service n\u2019a pas l\u2019attribut montant \"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" code \" : 4894564 ,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" error \" : \" Le montant de la prestation ne peut pas \u00eatre n\u00e9gatif \"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" code\" : 8598568 ,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\" error \" : \" Le compte ne correspond pas \u00e0 l\u2019 entit\u00e9 \"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br> &nbsp;&nbsp;&nbsp;]<br>}<\/pre>\n\n\n\n<p>Ces codes d\u2019erreurs doivent \u00eatre retourn\u00e9s en r\u00e9ponse au client \u00e0 l\u2019aide&nbsp;<a href=\"https:\/\/github.com\/egobsv\/EstandaresInteroperabilidad\/blob\/master\/Desarrollo.md#c%C3%B3digos-respuesta-http\">des codes HTTP<\/a>&nbsp;correspondants.<\/p>\n\n\n\n<p>POST \/service<\/p>\n\n\n\n<p># R\u00e9ponse d&#8217;erreur du serveur<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br> &nbsp;&nbsp;&nbsp;\"code\": \"0003\",<br>&nbsp;&nbsp;&nbsp;&nbsp;\"error\": \" Erreur dans le traitement de l'insertion massive de services \",<br> &nbsp;&nbsp;&nbsp;\"error\": [<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"code\": 1568548,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"error\": \" Le service n'a pas l'attribut montant\"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"code\": 4894564,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"error\": \"fr<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;]<br>}<\/pre>\n\n\n\n<p># HTTP 400 Bad Request<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.1.14. Codage.<\/em><\/strong><\/h4>\n\n\n\n<p>L\u2019encodage dans l\u2019en-t\u00eate &#8220;content-type&#8221; du protocole HTTP sera d\u00e9fini comme suit&nbsp;:<\/p>\n\n\n\n<p>content-type: application\/json; charset=utf-8<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>III.2.2. SOAP<\/strong><\/h3>\n\n\n\n<p>SOAP est un protocole cr\u00e9\u00e9 pour effectuer l\u2019\u00e9change structur\u00e9 de donn\u00e9es dans un environnement d\u00e9centralis\u00e9 (tous les participants \u00e0 la communication ne sont pas au m\u00eame endroit).&nbsp;Il s\u2019agit d\u2019un protocole d\u2019acc\u00e8s aux services bas\u00e9 sur des normes qui d\u00e9finit un ensemble de r\u00e8gles pour structurer les messages en XML.&nbsp;Il est ind\u00e9pendant du protocole de transport, du langage d\u2019impl\u00e9mentation, de la plate-forme et du syst\u00e8me d\u2019exploitation.<\/p>\n\n\n\n<p>Il est recommand\u00e9 d\u2019utiliser la version 1.2 de SOAP dans la mesure du possible.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.2.1. Les bonnes pratiques.<\/em><\/strong><\/h4>\n\n\n\n<p>Pour maintenir une coh\u00e9rence dans le d\u00e9veloppement des services SOAP, il est sugg\u00e9r\u00e9 de mettre en \u0153uvre les bonnes pratiques suivantes&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Les op\u00e9rations et messages sont d\u00e9finis selon ce qui est d\u00e9taill\u00e9 dans le fichier WSDL (Web Service Description Language) qui a la structure suivante :<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">< ? xml version = \" 1.0 \" encodage = \" UTF-8 \" ? ><br>< wsdl : definitions&nbsp; xmlns : wsdl = \" http:\/\/schemas.xmlsoap.org\/wsdl\/ \" ><br>< wsdl : types ><br> <! - d\u00e9finitions des types de donn\u00e9es (XSD) -> <br>< \/ wsdl : types ><br>< wsdl : message ><br> <! - d\u00e9finitions des donn\u00e9es \u00e0 \u00e9changer -> <br>< \/ wsdl : message ><br>< wsdl : portType ><br> <! - ensemble d\u2019op\u00e9rations prises en charge -> <br>< \/ wsdl : portType ><br>< wsdl : binding ><br> <! - sp\u00e9cification du protocole et du format de donn\u00e9es pour un portType ->&nbsp; <br>< \/ wsdl : binding ><br>< wsdl : service ><br> <! - collection finale de ressources (points de terminaison) ->&nbsp; <br>< \/ wsdl : service ><br>< \/ wsdl : definitions ><\/pre>\n\n\n\n<p>Il est important de noter que ce WSDL est g\u00e9n\u00e9ralement g\u00e9n\u00e9r\u00e9 automatiquement \u00e0 partir du code du langage de programmation qu\u2019on souhaite utiliser.<\/p>\n\n\n\n<p>Le fichier WSDL doit \u00eatre publi\u00e9 et doit \u00eatre accessible par l\u2019entit\u00e9 consommatrice.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Il existe diff\u00e9rentes mani\u00e8res de traduire le WSDL en message SOAP, cela est d\u00e9fini dans les styles.&nbsp;Il est recommand\u00e9 d\u2019utiliser le style document \u00e0 usage litt\u00e9ral (document\/literal), puisque tout ce qui est dans le corps du message SOAP est d\u00e9fini dans le sch\u00e9ma, ce qui permet de le valider.&nbsp;Ce style est conforme \u00e0 la sp\u00e9cification WS-I pour l\u2019interop\u00e9rabilit\u00e9.<\/li><\/ul>\n\n\n\n<p>Les styles de document sont d\u00e9finis dans l\u2019\u00e9l\u00e9ment du fichier WSDL comme on peut le voir ci-dessous :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">< wsdl : binding&nbsp; name = \" HelloWorldBinding \"&nbsp; type = \" ns: HelloWorldPortType \" ><br>< soap : binding&nbsp; transport = \" http:\/\/schemas.xmlsoap.org\/soap\/http \"&nbsp; style = \" document \" \/><br>< wsdl : operation name&nbsp; = \" getHelloWorld \" ><br> &nbsp;&nbsp;&nbsp;< soap : operation&nbsp; soapAction = \" urn: getHelloWorld \"&nbsp; style = \" document \" \/><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< wsdl : input ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< soap : body&nbsp; use = \" literal \" \/><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< \/ wsdl :input ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< wsdl : output><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< soap : body&nbsp; use = \" literal \" \/><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< \/ wsdl : output ><br> &nbsp;&nbsp;&nbsp;< \/ wsdl : operation ><br>< \/ wsdl : binding ><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Il est recommand\u00e9 d\u2019utiliser la notation &#8220;camel&#8221; (camelCase) pour nommer les op\u00e9rations du service web.<\/li><li>Les noms des op\u00e9rations sont des verbes descriptifs qui d\u00e9signent les actions \u00e0 effectuer.<\/li><li>Il est recommand\u00e9 que le fichier WSDL ait des op\u00e9rations li\u00e9es \u00e0 un seul objet.<\/li><li>Dans la mise en \u0153uvre d\u2019un service d\u2019interop\u00e9rabilit\u00e9 SOAP, il est recommand\u00e9 de ne pas maintenir un \u00e9tat entre les requ\u00eates au service (stateless), ce qui lui permet d\u2019\u00eatre r\u00e9utilisable par diff\u00e9rents consommateurs.<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.2.2. Validation des messages<\/em><\/strong><\/h4>\n\n\n\n<p>La validation de la structure XML et des contraintes de contenu se fait \u00e0 l\u2019aide de XSD (XML Schema Definition Language), qui est une recommandation du W3C.&nbsp;La version actuelle de cette recommandation est XML Schema 1.1, qui se compose de deux parties : XML Schema 1.1 Part 1 Structures et XML Schema 1.1 Part 2 Datatypes.<\/p>\n\n\n\n<p>XSD est le langage de d\u00e9finition de sch\u00e9ma repr\u00e9sent\u00e9 par XML.&nbsp;Parmi ses principaux composants utilis\u00e9s figurent : les d\u00e9finitions de types simples, les d\u00e9finitions de types complexes, la d\u00e9claration d\u2019attribut et la d\u00e9claration d\u2019\u00e9l\u00e9ment.<\/p>\n\n\n\n<p>Pour les restrictions sur le contenu des \u00e9l\u00e9ments XML, il existe les types de donn\u00e9es les plus couramment utilis\u00e9s&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>string : repr\u00e9sente des cha\u00eenes de caract\u00e8res.<\/li><li>bool\u00e9en : repr\u00e9sente les valeurs logiques.<\/li><li>dateTime : repr\u00e9sente une instance de temps.<\/li><li>d\u00e9cimal : repr\u00e9sente un ensemble de nombres r\u00e9els.<\/li><li>base64binary&nbsp;: repr\u00e9sente les donn\u00e9es binaires cod\u00e9es en base-64.<\/li><\/ul>\n\n\n\n<p>Exemple XSD&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">< xs : element name &nbsp; = \" personne \" ><br> &nbsp;&nbsp;&nbsp;< xs : complexeType ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< xs : sequence ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< xs : element name&nbsp; = \" id \" type = \" string \" \/>&nbsp;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< xs : element&nbsp; name = \" first name \"&nbsp; type = \" string \" \/><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< xs : element&nbsp; name = \" last name \"&nbsp; type = \" string \" \/><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< xs : element name&nbsp; = \" dateDeNaissance \" type = \" dateHeure \" \/>&nbsp;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< \/ xs : sequence ><br> &nbsp;&nbsp;&nbsp;< \/ xs : complexeType ><br>< \/ xs : element ><\/pre>\n\n\n\n<p>Il est recommand\u00e9 de s\u00e9parer la d\u00e9finition des types de donn\u00e9es du fichier WSDL, ce qu\u2019on permet de rendre le fichier WSDL plus lisible ;&nbsp;travaillez s\u00e9par\u00e9ment le fichier XSD (XML Schema Definition) et r\u00e9utilisez les sch\u00e9mas et les espaces de nommage.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.2.3. Gestion des versions.<\/em><\/strong><\/h4>\n\n\n\n<p>Pour la gestion des versions dans SOAP, il existe trois options qui sont les plus utilis\u00e9es&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Versionning de l\u2019op\u00e9ration<\/strong> : lorsqu\u2019un service qui a plusieurs op\u00e9rations veut en modifier une seule ;&nbsp;dans ce cas, il est recommand\u00e9 d\u2019appliquer la gestion des versions au nom de l\u2019op\u00e9ration, ce qui \u00e9vite des changements drastiques dans le WSDL.<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">< wsdl : operation name&nbsp; = \" operationV1 \" > < \/ wsdl : operation ><br>< wsdl : operation name&nbsp; = \" operationV2 \" > < \/ wsdl : operation ><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Gestion des versions du service<\/strong>&nbsp;: lorsqu\u2019une entit\u00e9 modifie de nombreuses op\u00e9rations dans un service, il est pr\u00e9f\u00e9rable de cr\u00e9er une nouvelle d\u00e9finition&nbsp;;&nbsp;dans ce cas, un nouveau WSDL sera d\u00e9fini. La d\u00e9finition d\u2019un nouveau WSDL implique qu\u2019il y aura une nouvelle ressource finale (endpoint).<\/li><\/ul>\n\n\n\n<p>L\u2019ajout de la propri\u00e9t\u00e9 &#8220;version&#8221; au XML, de mani\u00e8re \u00e0 ce que le consommateur puisse choisir la version dont il a besoin en fonction de la valeur envoy\u00e9e dans le XML.<\/p>\n\n\n\n<p>Il est recommand\u00e9 de conserver le type de versionnage d\u00e9j\u00e0 utilis\u00e9, cependant pour les nouveaux services d\u2019interop\u00e9rabilit\u00e9, il est sugg\u00e9r\u00e9 d\u2019effectuer le contr\u00f4le de version en ajoutant la propri\u00e9t\u00e9 &#8220;version&#8221; au XML.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.2.4. La gestion des erreurs<\/em><\/strong><\/h4>\n\n\n\n<p>Tous les probl\u00e8mes que pr\u00e9sentent les services d\u2019interop\u00e9rabilit\u00e9 doivent \u00eatre identifi\u00e9s, afin que l\u2019entit\u00e9 consommatrice du service comprenne la raison de l\u2019\u00e9chec.&nbsp;La structure XML suivante est recommand\u00e9e pour la gestion des erreurs&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">< response><br>< code > Code d\u2019 erreur < \/ code ><br> &nbsp;&nbsp;&nbsp;< error > Description d\u00e9taill\u00e9e de l\u2019erreur < \/ error ><br>< \/ response ><\/pre>\n\n\n\n<p>En cas de nombreuses erreurs, la structure XML suivante peut \u00eatre utilis\u00e9e&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">< response ><br>< code > Code d\u2019 erreur < \/ code ><br>< error > Description d\u00e9taill\u00e9e de l\u2019erreur < \/ error ><br>< errors ><br>< error><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< code > Identifiant du contexte d\u2019erreur < \/ code ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< description > Description d\u00e9taill\u00e9e de l\u2019erreur < \/ description ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< \/ error ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< error ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< code > Identifiant du contexte d\u2019erreur < \/ code ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< description > Description d\u00e9taill\u00e9e de l\u2019erreur < \/ description ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< \/ error ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<br> &nbsp;&nbsp;&nbsp;< \/ errors><br>< \/ response ><\/pre>\n\n\n\n<p>Voici un exemple de gestion des erreurs dans SOAP&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">< response ><br> &nbsp;&nbsp;&nbsp;< code > 0003 < \/ code ><br> &nbsp;&nbsp;&nbsp;< error > Erreur dans le traitement de l\u2019insertion massive de proc\u00e9dures < \/ error ><br> &nbsp;&nbsp;&nbsp;< errors ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< error ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< code > 15561561 < \/ code ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< description > Le processus n\u2019a pas l\u2019attribut montant < \/ description ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/ error><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< error><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< code > 4455621 < \/ code ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< description > Le montant de la proc\u00e9dure ne peut \u00eatre n\u00e9gatif < \/ description ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< \/ error><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< error ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< code > 15267548 < \/ code ><br>            < description > Le compte ne correspond pas \u00e0 l\u2019entit\u00e9 < \/ description ><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< \/ error><br> &nbsp;&nbsp;&nbsp;< \/ errors ><br>< \/ response ><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong><em>III.2.2.5. Codage.<\/em><\/strong><\/h4>\n\n\n\n<p>On doit d\u00e9finir l\u2019encodage dans l\u2019en-t\u00eate du document XML comme suit&nbsp;:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">< ?xml version=\"1.0\" encoding=\"UTF-8\"? ><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>III.2.3 Verbes HTTP<\/strong><\/h3>\n\n\n\n<p>Les verbes, ou m\u00e9thodes HTTP, doivent \u00eatre utilis\u00e9s conform\u00e9ment \u00e0 leurs d\u00e9finitions dans la norme 1.1\/HTTP.&nbsp;Exemple d\u2019utilisation des verbes HTTP pour cr\u00e9er, lire, mettre \u00e0 jour et supprimer des op\u00e9rations sur la ressource \u00ab&nbsp;services&nbsp;\u00bb&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"\"><tbody><tr><td>\n<strong>Op\u00e9ration<\/strong>\n<\/td><td>\n<strong>Verbe HTTP<\/strong>\n<\/td><td>\n<strong>\/service fournis<\/strong>\n<\/td><td>\n<strong>\/fournis\/1234<\/strong>\n<\/td><\/tr><tr><td>\nCR\u00c9ER\n<\/td><td>\nPOST\n<\/td><td>\nCr\u00e9er un nouveau ressource\n<\/td><td>\nErreur\n<\/td><\/tr><tr><td>\nLIRE\n<\/td><td>\nGET\n<\/td><td>\nObtenir la liste des ressources\n<\/td><td>\nObtenir le roussource avec l\u2019identifiant 1234\n<\/td><\/tr><tr><td>\nMETTRE \u00c0 JOUR\n<\/td><td>\nPATCH\n<\/td><td>\nErreur\n<\/td><td>\nMettre \u00e0 jour le ressource avec l\u2019identifiant 1234\n<\/td><\/tr><tr><td>\nT\u00c9L\u00c9VERSER UN OU DES FICHIER(S)\n<\/td><td>\nPUT\n<\/td><td>\nT\u00e9l\u00e9verser un nouveau fichier\n<\/td><td>\nMettre \u00e0 jour ou remplacer le fichier avec l\u2019identifiant 1234\n<\/td><\/tr><tr><td>\nSUPPRIMER\n<\/td><td>\nDELETE\n<\/td><td>\nSupprimer tous les ressources\n<\/td><td>\nSupprimer le ressource avec l\u2019identifiant 1234\n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>III.2.4 Codes de r\u00e9ponse HTTP<\/strong><\/h3>\n\n\n\n<p>Bien qu\u2019il existe un grand nombre de codes HTTP, les plus utilis\u00e9s sont :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"\"><thead><tr><th>\n<strong>Code<\/strong>\n<\/th><th>\n<strong>D\u00e9tail<\/strong>\n<\/th><th>\n<strong>D\u00e9finition<\/strong>\n<\/th><\/tr><\/thead><tbody><tr><td>\n200\n<\/td><td>\nOk&nbsp;\n<\/td><td>\nCode de base du succ\u00e8s.&nbsp;Cela fonctionne pour les cas g\u00e9n\u00e9raux.&nbsp;Utilis\u00e9 en particulier dans une r\u00e9ponse GET r\u00e9ussie ou un contenu mis \u00e0 jour.\n<\/td><\/tr><tr><td>\n201\n<\/td><td>\nCr\u00e9\u00e9 (Create)\n<\/td><td>\nIndique que la ressource a \u00e9t\u00e9 cr\u00e9\u00e9e.&nbsp;Il s\u2019agit g\u00e9n\u00e9ralement de la r\u00e9ponse pour cr\u00e9er des requ\u00eates PUT ou POST.\n<\/td><\/tr><tr><td>\n202\n<\/td><td>\nAccept\u00e9 (Accepted)\n<\/td><td>\nIndique que la demande a \u00e9t\u00e9 accept\u00e9e pour traitement.&nbsp;Il s\u2019agit g\u00e9n\u00e9ralement de la r\u00e9ponse \u00e0 un appel de traitement asynchrone.\n<\/td><\/tr><tr><td>\n204\n<\/td><td>\nPas de contenu (No content)\n<\/td><td>\nLa demande a r\u00e9ussi, mais il n\u2019y a rien \u00e0 montrer.&nbsp;Fr\u00e9quemment envoy\u00e9 apr\u00e8s un DELETE r\u00e9ussi.\n<\/td><\/tr><tr><td>\n206\n<\/td><td>\nContenu partiel (Partial content)\n<\/td><td>\nLa ressource renvoy\u00e9e est incompl\u00e8te.&nbsp;G\u00e9n\u00e9ralement utilis\u00e9 avec des ressources pagin\u00e9es.\n<\/td><\/tr><tr><td>\n301\n<\/td><td>\nRediriger d\u00e9finitivement (Redirect ou Moved permenantly)\n<\/td><td>\nL\u2019URI demand\u00e9 a \u00e9t\u00e9 d\u00e9finitivement redirig\u00e9 vers une autre ressource.&nbsp;Le consommateur doit acheminer ces requ\u00eates vers un autre URI.\n<\/td><\/tr><tr><td>\n302\n<\/td><td>\nTrouv\u00e9 (Found)\n<\/td><td>\nL\u2019URI demand\u00e9 a \u00e9t\u00e9 temporairement redirig\u00e9e, le consommateur doit continuer \u00e0 demander cette ressource \u00e0 l\u2019avenir.\n<\/td><\/tr><tr><td>\n400\n<\/td><td>\nMauvaise demande (Bad request)\n<\/td><td>\nErreur g\u00e9n\u00e9rale pour une demande qui ne peut pas \u00eatre trait\u00e9e (le consommateur ne doit pas r\u00e9p\u00e9ter la demande sans la modifier).\n<\/td><\/tr><tr><td>\n401\n<\/td><td>\nNon autoris\u00e9 (Unauthorized)\n<\/td><td>\nIndique que le consommateur n\u2019a pas d\u2019identit\u00e9 d\u00e9finie dans le service.\n<\/td><\/tr><tr><td>\n403\n<\/td><td>\nInterdit (Forbidden)\n<\/td><td>\nIndique que le consommateur a une identit\u00e9 d\u00e9finie dans le service, mais n\u2019a pas les autorisations pour la demande qu\u2019il a faite.\n<\/td><\/tr><tr><td>\n404\n<\/td><td>\nPas trouv\u00e9 (Not found)\n<\/td><td>\nLa ressource demand\u00e9e n\u2019existe pas.\n<\/td><\/tr><tr><td>\n405\n<\/td><td>\nM\u00e9thode Non Autoris\u00e9e (Method not allowed)\n<\/td><td>\nSoit la m\u00e9thode n\u2019est pas prise en charge, soit l\u2019associ\u00e9 \u00e0 cette ressource n\u2019a pas l\u2019autorisation.\n<\/td><\/tr><tr><td>\n406\n<\/td><td>\nPas acceptable (Not acceptable)\n<\/td><td>\nLa ressource n\u2019existe pas dans le format demand\u00e9.&nbsp;Par exemple, une ressource est demand\u00e9e en XML mais elle n\u2019est disponible qu\u2019en JSON.\n<\/td><\/tr><tr><td>\n500\n<\/td><td>\nErreur Interne du Serveur (Internal server)\n<\/td><td>\nLa requ\u00eate semble correcte, mais un probl\u00e8me est survenu sur le serveur.&nbsp;Le client ne peut rien y faire.\n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>R\u00e9f\u00e9rences<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/github.com\/WhiteHouse\/api-standards\">Normes API de la Maison Blanche, \u00c9tats-Unis<\/a><\/li><li><a href=\"https:\/\/github.com\/argob\/estandares\/blob\/master\/estandares-apis.md\">Normes API Gouvernement argentin<\/a><\/li><li><a href=\"http:\/\/www.vinaysahni.com\/best-practices-for-a-pragmatic-restful-api\">Best Practices for Designing a Pragmatic RESTful API<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Il est \u00e0 noter que cet article est \u00e9volutif dans le temps selon les contextes Derni\u00e8re mise \u00e0 jour : 14 novembre 2022 Version num\u00e9rique : Normes et standards d&#8217;interop\u00e9rabilit\u00e9 v1.0.0 Diffusion pour action&nbsp; Tous les services publics Diffusion pour information&nbsp; Secteur priv\u00e9 DOCUMENTS DE R\u00c9F\u00c9RENCE N\u00b0 Classement Titre 1 &nbsp; Cadre d\u2019interop\u00e9rabilit\u00e9 2 &nbsp; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-2430","post","type-post","status-publish","format-standard","hentry","category-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Normes et Standards d\u2019Interop\u00e9rabilit\u00e9<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/digital.gov.mg\/en\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:locale:alternate\" content=\"Madagascar\" \/>\n<meta property=\"og:locale:alternate\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Normes et Standards d\u2019Interop\u00e9rabilit\u00e9\" \/>\n<meta property=\"og:description\" content=\"Il est \u00e0 noter que cet article est \u00e9volutif dans le temps selon les contextes Derni\u00e8re mise \u00e0 jour : 14 novembre 2022 Version num\u00e9rique : Normes et standards d&#8217;interop\u00e9rabilit\u00e9 v1.0.0 Diffusion pour action&nbsp; Tous les services publics Diffusion pour information&nbsp; Secteur priv\u00e9 DOCUMENTS DE R\u00c9F\u00c9RENCE N\u00b0 Classement Titre 1 &nbsp; Cadre d\u2019interop\u00e9rabilit\u00e9 2 &nbsp; [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/digital.gov.mg\/en\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/\" \/>\n<meta property=\"og:site_name\" content=\"Unit\u00e9 de Gouvernance Digitale\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-29T07:46:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-14T13:31:08+00:00\" \/>\n<meta name=\"author\" content=\"Administrateur\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Administrateur\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"49 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/digital.gov.mg\\\/2021\\\/12\\\/29\\\/normes-et-standards-dinteroperabilite\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/digital.gov.mg\\\/2021\\\/12\\\/29\\\/normes-et-standards-dinteroperabilite\\\/\"},\"author\":{\"name\":\"Administrateur\",\"@id\":\"https:\\\/\\\/digital.gov.mg\\\/#\\\/schema\\\/person\\\/e0bfd7c501fa6d8ca7517987accbe996\"},\"headline\":\"Normes et Standards d\u2019Interop\u00e9rabilit\u00e9\",\"datePublished\":\"2021-12-29T07:46:22+00:00\",\"dateModified\":\"2022-11-14T13:31:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/digital.gov.mg\\\/2021\\\/12\\\/29\\\/normes-et-standards-dinteroperabilite\\\/\"},\"wordCount\":8928,\"commentCount\":0,\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/digital.gov.mg\\\/2021\\\/12\\\/29\\\/normes-et-standards-dinteroperabilite\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/digital.gov.mg\\\/2021\\\/12\\\/29\\\/normes-et-standards-dinteroperabilite\\\/\",\"url\":\"https:\\\/\\\/digital.gov.mg\\\/2021\\\/12\\\/29\\\/normes-et-standards-dinteroperabilite\\\/\",\"name\":\"Normes et Standards d\u2019Interop\u00e9rabilit\u00e9\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/digital.gov.mg\\\/#website\"},\"datePublished\":\"2021-12-29T07:46:22+00:00\",\"dateModified\":\"2022-11-14T13:31:08+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/digital.gov.mg\\\/#\\\/schema\\\/person\\\/e0bfd7c501fa6d8ca7517987accbe996\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/digital.gov.mg\\\/2021\\\/12\\\/29\\\/normes-et-standards-dinteroperabilite\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/digital.gov.mg\\\/2021\\\/12\\\/29\\\/normes-et-standards-dinteroperabilite\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/digital.gov.mg\\\/2021\\\/12\\\/29\\\/normes-et-standards-dinteroperabilite\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/digital.gov.mg\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Normes et Standards d\u2019Interop\u00e9rabilit\u00e9\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/digital.gov.mg\\\/#website\",\"url\":\"https:\\\/\\\/digital.gov.mg\\\/\",\"name\":\"Unit\u00e9 de Gouvernance Digitale\",\"description\":\"Solutions centr\u00e9es sur les besoins essentiels de la population\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/digital.gov.mg\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/digital.gov.mg\\\/#\\\/schema\\\/person\\\/e0bfd7c501fa6d8ca7517987accbe996\",\"name\":\"Administrateur\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5338e346d511fbce6718839a5237db5740235b1514ca9a2cb6955fb58f80d533?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5338e346d511fbce6718839a5237db5740235b1514ca9a2cb6955fb58f80d533?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5338e346d511fbce6718839a5237db5740235b1514ca9a2cb6955fb58f80d533?s=96&d=mm&r=g\",\"caption\":\"Administrateur\"},\"url\":\"https:\\\/\\\/digital.gov.mg\\\/en\\\/author\\\/root3gm\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Normes et Standards d\u2019Interop\u00e9rabilit\u00e9","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/digital.gov.mg\/en\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/","og_locale":"en_US","og_type":"article","og_title":"[:fr]Normes et Standards d\u2019Interop\u00e9rabilit\u00e9[:] - Unit\u00e9 de Gouvernance Digitale","og_description":"Il est \u00e0 noter que cet article est \u00e9volutif dans le temps selon les contextes Derni\u00e8re mise \u00e0 jour : 14 novembre 2022 Version num\u00e9rique : Normes et standards d&#8217;interop\u00e9rabilit\u00e9 v1.0.0 Diffusion pour action&nbsp; Tous les services publics Diffusion pour information&nbsp; Secteur priv\u00e9 DOCUMENTS DE R\u00c9F\u00c9RENCE N\u00b0 Classement Titre 1 &nbsp; Cadre d\u2019interop\u00e9rabilit\u00e9 2 &nbsp; [&hellip;]","og_url":"https:\/\/digital.gov.mg\/en\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/","og_site_name":"Unit\u00e9 de Gouvernance Digitale","article_published_time":"2021-12-29T07:46:22+00:00","article_modified_time":"2022-11-14T13:31:08+00:00","author":"Administrateur","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Administrateur","Est. reading time":"49 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/digital.gov.mg\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/#article","isPartOf":{"@id":"https:\/\/digital.gov.mg\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/"},"author":{"name":"Administrateur","@id":"https:\/\/digital.gov.mg\/#\/schema\/person\/e0bfd7c501fa6d8ca7517987accbe996"},"headline":"Normes et Standards d\u2019Interop\u00e9rabilit\u00e9","datePublished":"2021-12-29T07:46:22+00:00","dateModified":"2022-11-14T13:31:08+00:00","mainEntityOfPage":{"@id":"https:\/\/digital.gov.mg\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/"},"wordCount":8928,"commentCount":0,"articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/digital.gov.mg\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/digital.gov.mg\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/","url":"https:\/\/digital.gov.mg\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/","name":"Normes et Standards d\u2019Interop\u00e9rabilit\u00e9","isPartOf":{"@id":"https:\/\/digital.gov.mg\/#website"},"datePublished":"2021-12-29T07:46:22+00:00","dateModified":"2022-11-14T13:31:08+00:00","author":{"@id":"https:\/\/digital.gov.mg\/#\/schema\/person\/e0bfd7c501fa6d8ca7517987accbe996"},"breadcrumb":{"@id":"https:\/\/digital.gov.mg\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/digital.gov.mg\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/digital.gov.mg\/2021\/12\/29\/normes-et-standards-dinteroperabilite\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/digital.gov.mg\/"},{"@type":"ListItem","position":2,"name":"Normes et Standards d\u2019Interop\u00e9rabilit\u00e9"}]},{"@type":"WebSite","@id":"https:\/\/digital.gov.mg\/#website","url":"https:\/\/digital.gov.mg\/","name":"Unit\u00e9 de Gouvernance Digitale","description":"Solutions centr\u00e9es sur les besoins essentiels de la population","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/digital.gov.mg\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/digital.gov.mg\/#\/schema\/person\/e0bfd7c501fa6d8ca7517987accbe996","name":"Administrateur","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5338e346d511fbce6718839a5237db5740235b1514ca9a2cb6955fb58f80d533?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5338e346d511fbce6718839a5237db5740235b1514ca9a2cb6955fb58f80d533?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5338e346d511fbce6718839a5237db5740235b1514ca9a2cb6955fb58f80d533?s=96&d=mm&r=g","caption":"Administrateur"},"url":"https:\/\/digital.gov.mg\/en\/author\/root3gm\/"}]}},"_links":{"self":[{"href":"https:\/\/digital.gov.mg\/en\/wp-json\/wp\/v2\/posts\/2430","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/digital.gov.mg\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/digital.gov.mg\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/digital.gov.mg\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/digital.gov.mg\/en\/wp-json\/wp\/v2\/comments?post=2430"}],"version-history":[{"count":64,"href":"https:\/\/digital.gov.mg\/en\/wp-json\/wp\/v2\/posts\/2430\/revisions"}],"predecessor-version":[{"id":3291,"href":"https:\/\/digital.gov.mg\/en\/wp-json\/wp\/v2\/posts\/2430\/revisions\/3291"}],"wp:attachment":[{"href":"https:\/\/digital.gov.mg\/en\/wp-json\/wp\/v2\/media?parent=2430"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/digital.gov.mg\/en\/wp-json\/wp\/v2\/categories?post=2430"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/digital.gov.mg\/en\/wp-json\/wp\/v2\/tags?post=2430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}