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
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
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
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
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.
| 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. |