Przyjęcie oferty pięć razy powinno mieć taki sam skutek, jak jej przyjęcie raz. Jest idempotentny. Więc powinien to być PUT.
Być może warto rozważyć wybór innej nazwy dla "żądań". Kiedy wykonuję GET /requests/123
, proszę o odpowiedź, która jest żądaniem? Może to być trochę dezorientujące dla klientów.
Ponadto staraj się unikać zagnieżdżania identyfikatorów zasobów. To może przysporzyć Ci później problemów. Oferta tak naprawdę nie musi być "pod" odpowiednią prośbą. Co się dzieje, gdy później chcesz mieć oferty odpowiadające wielu prośbom?
Dobrą zasadą jest, jeśli uważają Państwo za „Gizmo” podmiot w entity-relationship model, powinien to być poziom root-URI, jak w GET /gizmos/17
, nie GET /widgets/54/gizmos/17
. Częstym błędem jest stwierdzenie "Każdy Gizmo ma dokładnie jeden powiązany widget, więc powinienem zagnieździć identyfikatory URI Gizmo jako rozszerzenia identyfikatorów URI widgetów."
Poniżej mam sugestię, jak będą wyglądały operacje. Zamiast tego możesz zastąpić niektóre odniesienia identyfikatorów identyfikatorami URI, ale to zależy od Ciebie.
POST /requests ---> 201 Created
Location: /requests/123
GET /requests ---> 200 OK
[
{
"requestId": 123,
"offersUri": "/offers?requestId=123",
...
},
...
]
POST /offers ---> 201 Created
{ Location: /offers/456
"requestId": 123,
"amount": 300,
...
}
GET /offers?requestId=123 ---> 200 OK
[
{
"requestId": 123,
"amount": 300,
...
}
]
PUT /offers/456/approval ---> 204 No Content
PUT /offers/456/approval ---> 204 No Content
PUT /offers/456/approval ---> 204 No Content
Powiedziałbym, że POST byłby odpowiedni do zaakceptowania wniosku, można użyć PUT do tworzenia żądań i ofert. – Shriike