Méthode HTTP PATCH

PATCH est utilisé pour une mise à jour partielle d'une ressource OSLC . Un PATCH ne supprime pas les propriétés de ressource locale non incluses dans la requête. La requête PATCH est envoyée par une méthode POST avec l'en-tête x-method-override défini sur PATCH.

Les règles suivantes s'appliquent lorsque vous utilisez un PATCH pour remplacer une ressource OSLC :

  • Toutes les propriétés de type littéral indiquées dans le document de demande sont mises à jour. Toute propriété littérale non spécifiée comme faisant partie de la requête n'est pas affectée explicitement. Cependant, elle peut être implicitement impactée par la logique métier liée à la ressource. Cette règle est la même que lorsque vous utilisez la méthode PUT pour remplacer une ressource.
  • Toutes les propriétés de ressource locales sont mises à jour ou remplacées par les valeurs de propriété correspondantes issues de la demande. Si la propriété de ressource n'est pas incluse dans la demande, la ressource locale correspondante n'est pas impactée explicitement. Si la propriété de ressource est incluse sa valeur remplace ou met à jour la valeur sur le serveur. Les autres propriétés de la ressource sont supprimées par une méthode PATCH et ne sont pas supprimées par une méthode MERGE.
  • Les ressources de référence ne peuvent pas être mises à jour de manière explicite. Cependant, vous pouvez mettre à jour les propriétés qui font référence à la ressource, et les propriétés suivent le modèle de mise à jour des propriétés de type littéral. Cette règle est la même que lorsque vous utilisez la méthode PUT pour remplacer une ressource.

Exemple : Mise à jour d'une propriété de type littéral

La méthode suivante met à jour la propriété du nom de la tâche :
POST http://yourserver/oslc/so/WorkTask/123
x-method-override: PATCH

{
   "dcterms:taskname": "Check-out Leaking – Modified for Test"
}

Contrairement à la méthode PUT, la méthode PATCH ne met pas à jour les autres propriétés de la tâche.

Exemple : Mise à jour d'une propriété de ressource locale

La méthode suivante met à jour un enregistrement de certaines pièces détachées spécifiées et supprime les autres données :
POST http://yourserver/oslc/so/WorkTask/123
x-method-override: PATCH

{
   "dcterms:taskname": "Check-out Leaking – Modified for Test",
    “spi:parts”: [
	{
		 “spi:partsid": "0000000067",
 "spi:quantity": 5
            }
]
}

Cette méthode a un comportement similaire à celui de la méthode PUT. Le système recherche un enregistrement de pièces détachées ayant l'ID 0000000067. Si un tel enregistrement existe, il est mis à jour. Si aucune correspondance n'est trouvée, un nouvel enregistrement de pièces détachées est créé. Tous les enregistrements de pièces détachées de cette ressource de tâche sont supprimés.

Exemple : Mise à jour et fusion d'une propriété de ressource locale

La méthode suivante met à jour la ressource avec l'en-tête PATCHTYPE défini sur MERGE :
POST http://yourserver/oslc/so/WorkTask/123
x-method-override: PATCH
PATCHTYPE: MERGE

{
   "dcterms:taskname": "Check-out Leaking – Modified for Test",
    “spi:parts”: [
	{
		 “spi:partsid": "0000000067",
 "spi:quantity": 5
            }
]
}

Le système recherche un enregistrement de pièces détachées ayant l'ID 0000000067. Si un tel enregistrement existe, il est mis à jour. Si aucune correspondance n'est trouvée, un nouvel enregistrement de pièces détachées est créé. Etant donné que l'en-tête PATCHTYPE est défini sur MERGE, les autres enregistrements de pièces détachées de cette ressource de tâche restent inchangés.

Exemple : Exécution d'une mise à jour conditionnelle

La méthode suivante met à jour la ressource si la valeur ETag est 1376596202470 :
POST http://yourserver/oslc/so/WorkTask/123
x-method-override: PATCH
if-match: 1376596202470

Si la valeur ETag est 1376596202470, la ressource de tâche est mise à jour et unHTTP 204est envoyé.

Si la valeur ETag n'est pas 1376596202470, le serveur répond par unHTTP 412 Precondition failed:NONE. Ce message implique que la ressource a été mise à jour par un autre processus et que le client demandeur possède une copie périmée de la ressource. Le client doit exécuter une méthode GET sur la ressource 123 pour obtenir une nouvelle copie de la ressource.

Le tableau suivant récapitule le résultat de chaque méthode de mise à jour lorsqu'elle est appliquée à différents types de ressources.
Méthode Propriétés littérales Ressources locales Ressources de référence
PUT Si une propriété est omise, la propriété n'est pas affectée. Si une propriété est omise, la propriété est supprimée. Si une propriété est omise, la propriété n'est pas affectée.
PATCH Si une propriété est omise, la propriété n'est pas affectée. Si une propriété est omise, la propriété n'est pas affectée. Si une propriété est omise, la propriété n'est pas affectée.
MERGE Si une propriété est omise, la propriété n'est pas affectée. Si une propriété est omise, la propriété n'est pas affectée. Si une propriété est omise, la propriété n'est pas affectée.