Myślenie w sposób RESTOWNOWY, czy prawidłowe jest używanie testu POST do utworzenia w jednym wywołaniu zasobu i jego pod-zasobu? W mojej aplikacji mam zasób /notices/{notice}
i sub-zasób /notices/{notice}/photos/{photo}
. A {photo}
nie może istnieć bez {notice}
, ale {notice}
nie musi koniecznie mieć zdjęć. Normalnie muszę najpierw zrobić POST, aby utworzyć powiadomienie, następnie kolejny POST, aby dodać zdjęcie.REST - Tworzenie zasobów zagnieżdżonych z pojedynczym POST
Teraz chcę zezwolić na utworzenie ogłoszenia ze zdjęciem bezpośrednio dołączonym, umożliwiając utworzenie /notices/{notice}
i /notices/{notice}/photos/{photo}
z pojedynczym żądaniem POST do/notice/{notice}/photos/{photo}, z treścią wieloczęściową opisujące oba zasoby (JSON dla ogłoszenia, plik binarny dla zdjęcia). Myślę, że zwrócę nagłówek Location tylko dla pod-zasobu.
Zasadniczo chcę, aby uniemożliwić klientom Android wysłanie dwóch żądań POST do serwera w celu przesłania powiadomienia ze zdjęciem. Czy to prawda? Czy może narusza zasady REST? Czy powinienem rozważyć ich oddzielenie i złożenie dwóch różnych wniosków? Czy też niewłaściwe jest uznawanie zdjęć za osobny przedmiot z ogłoszenia? Czy powinienem przechowywać tylko /notices/{notice}
jako źródło, używając PUT do dodawania zdjęć?
Jakie jest najlepsze rozwiązanie?
Z pewnością według tej logiki, wszystko po punkcie końcowym byłoby modyfikacją głównego zasobu, a zatem sprawiłoby, że idea "POST" stała by się zbędna? (Być może cię źle zrozumiałem?) – James
Teoretycznie tak. Możesz myśleć o/pytania jako sub zasobu stackoverflow.com. To jednak nie sprawia, że POST jest zbędny. –
Twierdziłbym, że użycie opcji 'POST' byłoby jedyną rozsądną opcją, ponieważ OP nie modyfikuje najwyższego zasobu (bezpośrednio)? Aby utworzyć zasób z "PUT", oznacza to, że ten pod-zasób już istnieje? – James