Zwracanie różnej ilości zasobu

0

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?

0

Możesz zrobić 1 endpoint GET /products z request param "id" posiadającym elementy, np. /products?id=product1,product2,product3
https://stackoverflow.com/a/4596455/14133357

1

Dla mnie takie POSTy to standard w REST API, aczkolwiek w Javie nie pisze. Zawsze wysyła się jakiś SearchRequest i można tam różne kryteria dawac. Nie widze dlaczego dla klienta ma to byc problem. Ofc. klient nie powinien recznie skladac tego jsona tylko to powinno sie serializowac z klasy SearchRequesta. Zreszta taki endpoint powinien dostarczyc paczke z klientem dla danego jezyka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1