Hej,
Zastanawiam się w jaki sposób dobrze w tym wypadku skonstruować endpointy i w jaki sposób Klient ma prosić o dane.
Mam zasób Product, planuje 3 ścieżki w jaki można go wykorzystać
- Pobranie pełnej listy Produktów
- Pobranie konkretnego Produktu po id
- Pobranie listy Produktów po ich id
Dwa pierwsze są jasne, problem mam jednak jak rozwiązać trzeci use case.
GET /products
- zwraca wszystkie Produkty w bazie
GET /products/{id}
- zwraca konkretny Produkt
W tym momencie druga ścieżka wydaje mi się troche bez sensu dla tego zastosowania.
Mam rózne pomysły czytając o 'dobrych praktykach', standaryzacji etc, na przykład najnowszy:
Mamy jeden endpoint /products
Obsługujemy go poprzez GET i POST(bo podobno GET nie powinien mieć żadnego payloadu), w poscie w payloadzie wymagamy zawsze przekazania listy idków Produktu, zależnie ile id przekażemy, tyle Produktów dostaniemy, przy pustej liście pójdzie 400.
POST /products lub POST /products/_search
w payloadzie requesta:
{
"data":[
"id1",
"id2",
"id3"
]
}
W żadnym z dotychczas używanych api nie spotkałem się jednak z taką formą requestów, dodatkowo formułowanie zapytania np przez Klienta jest w jakiś sposób utrudniona.
Dla szerszego kontekstu, w bazie mam między innymi zasoby Products i Users. User może dodać Product do 'koszyka', dodaje tam id Produktu. W przypadku potrzeby wyświetlenia zawartości 'koszyka' chciałbym by Kient mógł pobrać faktyczne produkty na podstawie idków trzymanych na Userze i wyświetlić.
Co myślicie?