Implémentation d'API FHIR REST

VérifiéSûr

Guide expert pour implémenter des serveurs et clients API FHIR RESTful conformes à la spécification HL7 FHIR (R4/R5). Couvre les opérations CRUD, les bundles, les transactions et la négociation de contenu.

Spar Skills Guide Bot
DeveloppementAvancé
28/02/2026
Claude CodeCursorCodex
#fhir#rest-api#hl7#healthcare-interoperability#api-design

Recommandé pour

Synthèse automatique

Fournit des conseils d’implémentation pour les serveurs et clients API RESTful HL7 FHIR, couvrant les schémas d’URL, les opérations de base, la négociation de contenu, les en-têtes, le versionnage et les opérations conditionnelles.

Points forts

  • Tableau concret des opérations FHIR avec méthodes HTTP, motifs d’URL et codes de succès.
  • Détaille les types MIME application/fhir+json/xml et le paramètre fhirVersion pour R2 à R5.
  • Couvre les en-têtes requis, les ETag faibles et le verrouillage optimiste via If-Match.
  • Renvoie à une référence dédiée pour les spécifications détaillées des opérations.

Limites

  • Le contenu fourni est tronqué à la section sur le versionnage et CapabilityStatement.
  • Se concentre sur la couche REST, pas sur la modélisation des ressources ni la validation clinique.
  • Suppose une connaissance préalable de la spécification FHIR et des ressources concernées.
Quand l'utiliser

Utilisez cette compétence lorsque vous devez concevoir ou implémenter des points de terminaison RESTful FHIR, un serveur FHIR ou un client FHIR conforme à HL7.

Quand l'éviter

Ne l’utilisez pas pour définir des modèles de données cliniques, valider sémantiquement des ressources FHIR ou concevoir des API non FHIR.

Analyse de sécurité

Sûr
Score qualité90/100

The skill is purely instructional documentation for implementing FHIR REST APIs. It contains no executable commands, network calls, credential handling, destructive operations, or attempts to disable safety controls. It only describes standard HTTP/FHIR patterns and therefore presents no meaningful execution risk.

Aucun point d'attention détecté

Comment cette analyse est faite

Exemples

Add FHIR read and search endpoints
Implement FHIR R4 read and search endpoints for Patient in my Express server, including application/fhir+json content negotiation and ETag version headers.
Support conditional create and transactions
Add conditional create and batch transaction support to our FHIR API using the If-None-Exist header and a Bundle request body.
Implement optimistic locking in a FHIR client
Write a FHIR client method that updates an Observation using If-Match with the current weak ETag and handles a 412 Precondition Failed response.

name: fhir-api description: Expert guidance for implementing FHIR RESTful API servers and clients following the HL7 FHIR specification. Use this skill when implementing a FHIR server with REST endpoints, building a FHIR client, designing FHIR API routes and handlers, implementing FHIR operations (read, create, update, delete, search, history), working with FHIR bundles, batch requests, or transactions, handling FHIR content negotiation, headers, and versioning, or implementing conditional operations. Trigger keywords include "FHIR REST", "FHIR API", "FHIR server", "FHIR client", "FHIR endpoint", "FHIR operations", "RESTful FHIR", "implement FHIR".

FHIR REST API implementation

This skill provides guidance for implementing FHIR RESTful APIs according to the HL7 FHIR specification (R4/R5).

URL structure

All FHIR REST URLs follow the pattern:

[base]/[type]/[id]
  • [base]: Service base URL (e.g., https://fhir.example.org/r4)
  • [type]: Resource type (e.g., Patient, Observation)
  • [id]: Logical resource ID

URLs are case-sensitive and use UTF-8 encoding.

Core operations

| Operation | HTTP | URL Pattern | Success | | ----------------- | -------- | ----------------------------------- | ------- | | Read | GET | [base]/[type]/[id] | 200 | | VRead | GET | [base]/[type]/[id]/_history/[vid] | 200 | | Create | POST | [base]/[type] | 201 | | Update | PUT | [base]/[type]/[id] | 200/201 | | Patch | PATCH | [base]/[type]/[id] | 200 | | Delete | DELETE | [base]/[type]/[id] | 200/204 | | Search | GET/POST | [base]/[type]?params | 200 | | History | GET | [base]/[type]/[id]/_history | 200 | | Capabilities | GET | [base]/metadata | 200 | | Batch/Transaction | POST | [base] | 200 |

For detailed specifications of each operation, see references/operations.md.

Content negotiation

MIME types

| Format | MIME Type | | ------ | ------------------------- | | JSON | application/fhir+json | | XML | application/fhir+xml | | RDF | application/fhir+turtle |

Use the Accept header for response format and Content-Type for request body format.

The _format query parameter overrides Accept when clients cannot set headers.

FHIR version

Specify version via MIME type parameter:

Accept: application/fhir+json; fhirVersion=4.0

Version mappings: 1.0 (R2), 3.0 (R3), 4.0 (R4), 4.3 (R4B), 5.0 (R5).

Required headers

Request headers

| Header | Purpose | Example | | ------------- | ------------------- | ----------------------- | | Accept | Response format | application/fhir+json | | Content-Type | Request body format | application/fhir+json | | If-Match | Optimistic locking | W/"123" | | If-None-Exist | Conditional create | identifier=123 | | Prefer | Return preference | return=representation |

Response headers

| Header | Purpose | Example | | ------------- | ------------------ | ------------------------------- | | ETag | Version identifier | W/"123" | | Location | New resource URL | [base]/Patient/123/_history/1 | | Last-Modified | Modification time | RFC 7231 date |

Versioning and optimistic locking

FHIR uses weak ETags for version tracking:

  1. Server returns ETag: W/"[versionId]" with responses
  2. Client sends If-Match: W/"[versionId]" with updates
  3. Server returns 412 Precondition Failed if version mismatch

Implement version-aware updates when CapabilityStatement.rest.resource.versioning is versioned-update.

Error handling

Return OperationOutcome resources for all errors:

{
    "resourceType": "OperationOutcome",
    "issue": [
        {
            "severity": "error",
            "code": "invalid",
            "diagnostics": "Patient.birthDate: Invalid date format"
        }
    ]
}

Status codes

| Code | Meaning | | ---- | -------------------------------------- | | 400 | Invalid syntax or validation failure | | 404 | Resource not found | | 409 | Version conflict | | 410 | Resource deleted | | 412 | Precondition failed (version mismatch) | | 422 | Business rule violation |

Prefer header

Control response content with Prefer:

| Value | Response body | | ------------------------- | -------------------- | | return=minimal | Empty (headers only) | | return=representation | Full resource | | return=OperationOutcome | Validation outcome |

For async operations, use Prefer: respond-async to get 202 Accepted with status polling URL.

Implementation checklist

Server implementations should:

  1. Implement CapabilityStatement at /metadata
  2. Support content negotiation (JSON at minimum)
  3. Return proper ETags for versioned resources
  4. Include Location header on create/update
  5. Return OperationOutcome for all errors
  6. Support _format parameter fallback
  7. Honour Prefer header for response content

References

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/fhir-rest-api-implementation-mm5t89ov/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/fhir-rest-api-implementation-mm5t89ov' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/fhir-rest-api-implementation-mm5t89ov/download' --output '.skill-downloads/fhir-rest-api-implementation-mm5t89ov/SKILL.md.part' && mv '.skill-downloads/fhir-rest-api-implementation-mm5t89ov/SKILL.md.part' '.skill-downloads/fhir-rest-api-implementation-mm5t89ov/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/fhir-rest-api-implementation-mm5t89ov/SKILL.md' && test -s '.skill-downloads/fhir-rest-api-implementation-mm5t89ov/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/fhir-api' && cp -R '.skill-downloads/fhir-rest-api-implementation-mm5t89ov' '.claude/skills/fhir-api'

Cursor
test -f '.skill-downloads/fhir-rest-api-implementation-mm5t89ov/SKILL.md' && test -s '.skill-downloads/fhir-rest-api-implementation-mm5t89ov/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/fhir-api' && cp -R '.skill-downloads/fhir-rest-api-implementation-mm5t89ov' '.cursor/skills/fhir-api'

Codex
test -f '.skill-downloads/fhir-rest-api-implementation-mm5t89ov/SKILL.md' && test -s '.skill-downloads/fhir-rest-api-implementation-mm5t89ov/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/fhir-api' && cp -R '.skill-downloads/fhir-rest-api-implementation-mm5t89ov' '.agents/skills/fhir-api'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/fhir-rest-api-implementation-mm5t89ov'

openskills read 'fhir-rest-api-implementation-mm5t89ov'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/fhir-rest-api-implementation-mm5t89ov/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires