Zasadniczo masz jeden punkt końcowy, który reprezentuje całą kolekcję x :
/products
Powiedzmy, chcesz zaktualizować jeden produkt, dokonaniu PUT do /products/{id}
. Jeśli chcesz częściowo zaktualizować pojedynczy produkt (nie aktualizując każdego pola), możesz również użyć PATCH do /products/{id}
. To samo dotyczy usunięcia pojedynczego elementu ( DELETE to /products/{id}
).
Jeśli chcesz kierować pojedynczą ressource, kwalifikujesz torem, który pojedynczy Ressource, chcesz zmodyfikować.
Jedynym działaniem, które łamie schemat, jest utworzenie zasobu. Podczas tworzenia zasobu kierujesz kolekcję jako całość, powiedz POST na /products
.
To powiedziawszy, powinno być jasne, że cel operacji wpływających na kolekcję jako całość powinien trafić do odpowiedniego punktu końcowego gromadzenia.
Np. Chcesz odzyskać podzbiór produktów, które są czerwone, pytasz o to przez
GET do /products?colour=red
.
Tak więc, jeśli chcesz usunąć wszystkie z nich, to DELETE /products?colour=red
. Lub jeśli chcesz usunąć niektóre z produktów za pośrednictwem id
, można DELETE /products?id=1&id=2&id=3
.
Co z masowym tworzeniem zasobów? POST swoją kolekcję [{...},{...},{...}]
po prostu /products
. To samo dotyczy PUT i PATCH .
To naprawdę proste.
Aby odpowiedzieć na pytania:
Jeśli muszę dodać do kolekcji, czy mogę przekazać tylko niektóre produkty z PUT?
To nie tylko OK, zachęcamy Cię do robienia tego w ten sposób.
Jeśli muszę usunąć niektóre produkty z kolekcji, czy mogę przesyłać dane filtru (tablicę identyfikatorów) za pomocą DELETE?
W porządku. Jak napisał Eneko Alonso, czasami zdarzają się operacje zbiorcze za pomocą punktów końcowych „kontrolera”, tj. POST służy do wyzwalania (złożonych) operacji.