En général, vous avez un point de terminaison qui représente l'ensemble de la collection de x :
/products
Dites, vous souhaitez mettre à jour un seul produit, vous faites un PUT à /products/{id}
. Si vous souhaitez mettre à jour partiellement un seul produit (pas mettre à jour tous les champs), vous pouvez également utiliser un PATCH pour /products/{id}
. Il en va de même pour la suppression d'une seule entité ( DELETE to /products/{id}
).
Si vous souhaitez cibler une seule ressource, vous qualifiez via path, quelle ressource unique , vous souhaitez modifier.
La seule action qui rompt le schéma est la création d'une ressource. Lorsque vous créez une ressource, vous ciblez la collection dans son ensemble, dites POST to /products
.
Cela dit, il doit être clair que l'objectif des opérations affectant la collection dans son ensemble doit aller au point de terminaison de collecte approprié.
Par exemple, vous souhaitez récupérer un sous-ensemble de produits qui sont rouges, vous le demandez par
GET to /products?colour=red
.
Donc, si vous souhaitez supprimer tout cela, vous SUPPRIMEZ /products?colour=red
. Ou si vous souhaitez supprimer certains produits via id
, vous pouvez SUPPRIMER /products?id=1&id=2&id=3
.
Qu'en est-il de la création en masse de ressources? POSTEZ votre collection [{...},{...},{...}]
simplement /products
. Il en va de même pour PUT et PATCH .
C'est vraiment simple.
Pour répondre à vos questions:
Si j'ai besoin d'ajouter à la collection, est-ce OK que je ne passe que certains produits avec PUT?
Ce n'est pas seulement OK, vous êtes encouragé à le faire comme ça.
Si je dois supprimer certains produits de la collection, est-ce OK que je passe des données de filtre (un tableau d'ID) avec DELETE?
C'est bon. Comme l'a écrit Eneko Alonso, il y a parfois des opérations en bloc encapsulées via des points de terminaison "contrôleur", c'est-à-dire qu'un POST est utilisé pour déclencher des opérations (complexes).