Skip to content

Commit

Permalink
Merge pull request #248 from ansforge/integration_fhir
Browse files Browse the repository at this point in the history
add integration fhir folder
  • Loading branch information
zilliw authored Oct 15, 2024
2 parents 3d4f0b2 + 2d5594b commit 6665cf6
Show file tree
Hide file tree
Showing 5 changed files with 228 additions and 16 deletions.
18 changes: 9 additions & 9 deletions docs/pages/guide/version-2/getting-started/api-basics.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ subTitle: Démarrage rapide

### URL d'accès (base url)

Tous les accès se font via HTTPS.

#### Environnement Production

Tous les accès se font via HTTPS.

| Variables | Valeurs |
| --- | --- |
| api-url | https://gateway.api.esante.gouv.fr/fhir/v2/1.x |
Expand All @@ -23,12 +23,12 @@ NOTE| Il n'existe pas d'environement bac à sable de l'API avec des données fic

| Variables | Valeurs |
| --- | --- |
| [api-url]/metadata | Pour le capability statement |
| [api-url]/Practitioner | Pour les exercices professionnels des professionnels intervenant dans le système de santé |
| [api-url]/PractitionerRole | Pour les situations d'exercice des professionnels |
| [api-url]/Organization | Pour les structures (entités juridiques, entités géographiques) |
| [api-url]/HealthcareService | Pour les activités de soins et les équipements sociaux |
| [api-url]/Device | Pour les équipements matériels lourds (EML) |
| [api-url]/metadata | Récupérer le capability statement |
| [api-url]/Practitioner | Récupérer les exercices professionnels des professionnels intervenant dans le système de santé |
| [api-url]/PractitionerRole | Récupérer les situations d'exercice des professionnels |
| [api-url]/Organization | Récupérer les structures (entités juridiques, entités géographiques) |
| [api-url]/HealthcareService | Récupérer les activités de soins et les équipements sociaux |
| [api-url]/Device | Récupérer les équipements matériels lourds (EML) |
<!-- | [api-url]/health | Pour le healthcare du service API FHIR, accessible sans authentification | -->

### Codes d’état HTTP (HTTP status codes)
Expand All @@ -40,7 +40,7 @@ Les codes HTTP standard sont des codes de statut envoyés par un serveur en rép
| --- | --- | --- |
| 200 | OK | Requête réussie |
| 400 | Bad Request | La requête est mal formatée. Vérifiez les paramètres ou la syntaxe |
| 401 Unauthorized | Impossible d'authentifier la requête |
| 401 | Unauthorized | Impossible d'authentifier la requête |
| 403 | Forbidden | La requêtes n'est pas autorisée |
| 404 | Not found | La ressource n'est pas trouvée |
| 500 | Internal Server Error |Une erreur inattendue est survenue | |
Expand Down
16 changes: 9 additions & 7 deletions docs/pages/guide/version-2/getting-started/test-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Veuillez trouver ci-dessous les variables utilisées dans le projet Postman:

|Variable|Description|Valeur|
|---|---|---|
|api_key|Clé d'API (Si vous n'avez pas de clé, veuillez suivre la procédure décrite [ici](/annuaire-sante-fhir-documentation/pages/guide/version-1/getting-started/test-api.html))|Saisissez votre clé|
|api_key|Clé d'API (Si vous n'avez pas de clé, veuillez suivre la procédure décrite [ici](/annuaire-sante-fhir-documentation/pages/guide/version-2/getting-started/test-api.html))|Saisissez votre clé|
|api_url|L’url d’accès à l’API |https://gateway.api.esante.gouv.fr/fhir/v2/1.x|

<p align="center">
Expand All @@ -48,25 +48,22 @@ NOTE| Pour la suite de l'exercice, vous devez remplacer {{site.ans.demo_key }} p

Pour ces premiers tests, nous utilisons [cURL](https://curl.se/) pour plus de simplicité.

### Récuperer le Capability Statement FHIR
### Récuperer le Capability Statement FHIR (Metadata)


<div class="wysiwyg" markdown="1">
* **Test 1** : lancez la commande suivante pour récupérer le CapabilityStatement FHIR (liste des fonctionnalités de l'API) :
* **Test 1** : lancez la commande suivante pour récupérer le CapabilityStatement (liste des fonctionnalités de l'API) :
</div>
&nbsp;



<div class="code-sample"><div class="tab-content" data-name="Invite de commandes">
{% highlight bash %}
curl -H "ESANTE-API-KEY: {{site.ans.demo_key }}" "{{site.ans.api_url}}/metadata?_pretty=true&_format=json"
curl -H "ESANTE-API-KEY: {{site.ans.demo_key }}" "{{site.ans.api_url}}/metadata"
{% endhighlight %}
</div></div>
<div class="wysiwyg" markdown="1">
* Ci-dessous la réponse de l'API :
</div>
&nbsp;

```json
{
Expand Down Expand Up @@ -168,3 +165,8 @@ Pour plus d'informations, consulter le site [IGC-Santé de l'ANS](https://igc-sa
<p align="center">
<img src="img/erreur-certificat.png" style="width:80%;">
</p>


### Taux de disponibilité

Le taux de disponibilité qui doit être assuré par le titulaire du marché qui maintient et héberge nos SI est de 99,4% (24h/24 et 7j/7).
62 changes: 62 additions & 0 deletions docs/pages/guide/version-2/integration-fhir/integration-dotnet.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
layout: menu-version-1
title: Utilisation de C#
subTitle: Intégration FHIR
---

Ce guide décrit comment intégrer l'API à un projet .Net Core.

Si vous n'avez pas de clé d'API, veuillez suivre la procédure décrite [ici]({{ '/pages/guide/version-1/integration-fhir/integration-dotnet.html'}}).

NOTE| Dans nos différents exemples, nous utilisons maven et la librairie développée par Firely Hl7.Fhir.R4. FHIR reste une API HTTP JSON/XML qui pourra être appelée avec d'autres techniques.


### Dépendance

Ajoutez la dépendance Hl7.Fhir.R4 à votre projet. Nous choisirons la version R4 car l'api proposée est basée sur FHIR R4.

```
dotnet add package Hl7.Fhir.R4 --version 4.3.0
```


&nbsp;

### Configuration du client HTTP FHIR avec HAPI

Par rapport à l'utilisation de base du client Fhir, nous spécifions un HttpClientHandler afin d'ajouter l'API Key d'authentification.

Voici un exemple nominal:
<div class="code-sample"><div class="tab-content" data-name="C#">
{% highlight csharp %}
// class to add the security token in the header:
public class AuthorizationMessageHandler : HttpClientHandler
{
protected async override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.Headers.Add("ESANTE-API-KEY", "{{site.ans.demo_key }}");
return await base.SendAsync(request, cancellationToken);
}
}

// client creation:
var settings = new FhirClientSettings
{
Timeout = 40000,
PreferredFormat = ResourceFormat.Json,
VerifyFhirVersion = false,
};
var handler = new AuthorizationMessageHandler();
var client = new FhirClient("{{site.ans.api_url}}/fhir/", settings, handler);

// and then use the client:
var result = client.Search<Device>();

{% endhighlight %}
</div></div>


Vous retrouverez toute la documentation de ce client sur le site de la librairie Firely HL7 FHIR SDK in .NET :
* [Site du SDK](https://fire.ly/products/firely-net-sdk/)
* [Documentation](https://docs.fire.ly/projects/Firely-NET-SDK/en/latest/)

84 changes: 84 additions & 0 deletions docs/pages/guide/version-2/integration-fhir/integration-java.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
---
layout: menu-version-1
title: Utilisation de Java
subTitle: Intégration FHIR
---

Ce guide décrit comment intégrer l'API à un projet Java.

Si vous n'avez pas de clé d'API, veuillez suivre la procédure décrite [ici]({{ '/pages/guide/version-1/integration-fhir/integration-java.html'}}).

NOTE| Dans nos différents exemples, nous utilisons maven et la librairie Hapi. FHIR reste une API HTTP JSON/XML qui pourra être appelée avec d'autres techniques.

### Dépendances maven

Pour l'exemple, le projet est un projet java maven. Nous utilisons la librairie [Java Hapi](https://hapifhir.io/){:target="_blank"} qui permet entre autres de faire des appels FHIR.

Pour utiliser les librairies Hapi, nous allons ajouter les dépendances suivantes dans le fichier pom.xml :

```xml
<properties>
<hapifhir_version>6.0.0</hapifhir_version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!-- Hapi classes -->
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>${hapifhir_version}</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-client</artifactId>
<version>${hapifhir_version}</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-r4</artifactId>
<version>${hapifhir_version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
```

&nbsp;

### Configuration du client HTTP FHIR avec HAPI

Par rapport à l'utilisation de base du client HAPI, nous spécifions un Intercepeur afin d'ajouter l'API Key d'authentification.

Voici un exemple nominal:
<div class="code-sample"><div class="tab-content" data-name="java">
{% highlight java %}
// register the interceptor only one time:
var client = ctx.newRestfulGenericClient("{{site.ans.api_url}}/fhir");
client.registerInterceptor(new IClientInterceptor() {
@Override
public void interceptRequest(IHttpRequest iHttpRequest) {
iHttpRequest.addHeader("ESANTE-API-KEY", "{{site.ans.demo_key }}");
}
@Override
public void interceptResponse(IHttpResponse iHttpResponse) throws IOException {}
});
// and then use the client:
var conf = client
.capabilities()
.ofType(CapabilityStatement.class)
.execute();
{% endhighlight %}
</div></div>

NOTE| La création du client est coûteuse, nous recommandons de conserver le client pour plusieurs appels.

La documentation Hapi est très riche sur le fonctionnement de son client, vous pourrez trouver différents usages: [Documentation Client HAPI](https://hapifhir.io/hapi-fhir/docs/client/generic_client.html){:target="_blank"}

64 changes: 64 additions & 0 deletions docs/pages/guide/version-2/integration-fhir/integration-php.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
layout: menu-version-1
title: Utilisation de PHP
subTitle: Intégration FHIR
---

Ce guide décrit comment intégrer l'API à un projet PHP.

Si vous n'avez pas de clé d'API, veuillez suivre la procédure décrite [ici]({{ '/pages/guide/version-1/integration-fhir/integration-php.html'}}).

NOTE| Dans nos différents exemples, nous utilisons composer et la librairie dcarbone/php-fhir pour FHIR et Guzzle pour le REST. FHIR reste une API HTTP JSON/XML qui pourra être appelée avec d'autres techniques.

### Dépendances composer

dcarbone/php-fhir permet de parser et typer les objets FHIR. Cela pourra être utilisé par exemple pour la complétion.



<div class="code-sample"><div class="tab-content" data-name="composer">
{% highlight php %}
{
"require": {
"dcarbone/php-fhir-generated": "v2.0.*",
"guzzlehttp/guzzle": "^7.0"
}
}
{% endhighlight %}

</div>
</div>


### Configuration du client HTTP FHIR avec Guzzle

Les requêtes sont des requêtes REST auxquelles nous précisons un header https.

Voici un exemple nominal :


<div class="code-sample"><div class="tab-content" data-name="PHP">

{% highlight php %}
<?php
require_once '../vendor/autoload.php';
use DCarbone\PHPFHIRGenerated\R4\PHPFHIRResponseParser;
use DCarbone\PHPFHIRGenerated\R4\PHPFHIRResponseParserConfig;
$config = new PHPFHIRResponseParserConfig([
'registerAutoloader' => true,
'sxeArgs' => LIBXML_COMPACT | LIBXML_NSCLEAN
]);
$parser = new PHPFHIRResponseParser($config);


$header = ['ESANTE-API-KEY' => 'eb2e94fa-ffe6-491f-aa9d-073f6a5a2415'];
$client = new GuzzleHttp\Client([
'base_uri' => 'https://gateway.api.esante.gouv.fr',
'timeout' => 2.0,
'headers' => $header]);
{% endhighlight %}

</div></div>


0 comments on commit 6665cf6

Please sign in to comment.