Jak dyskretny powinien być interfejs API RESTful?


12

Nigdy wcześniej nie budowałem interfejsu API RESTful i zastanawiam się, jak dyskretny powinien być?

Załóżmy na przykład, że mam klienta, który ma imię i nazwisko, adres, numer telefonu, adres e-mail, język itp.

Czy ma sens, że istnieje sposób na aktualizację każdego pola (adres aktualizacji, adres e-mail aktualizacji itp.), Czy może powinna być tylko jedna aktualizacja dla całego klienta, a każde pole jest opcjonalne?


3
Jakiej części REST chcesz? Jeśli potrzebujesz tylko prostego interfejsu API nie martwiącego się o standardy, możesz sobie z nim poradzić, tak jak zaakceptowana odpowiedź Thorsten Müller. Jeśli chcesz prawdziwego REST, musisz poszukać Roy Fieldinga (na przykład rozprawa). Jest wynalazcą REST. Zobaczysz, że na przykład idea, że ​​zasób == tabela nie jest prawdą. Przekonasz się również, że na przykład w przypadku pytania metoda PATCH HTTP jest dość powszechna w przypadku aktualizacji jednego lub więcej pól. Gdzie można użyć metody POST lub PUT (tutaj wiele dyskusji) do kompletnych aktualizacji zasobu.
Luc Franken,

Odpowiedzi:


17

Masz jedną akcję aktualizacji dla zasobu. Z grubsza ogólną zasadą jest, że tabela w bazie danych będzie zasobem. Tak więc w twoim przykładzie jest jeden kontroler dla klienta z jedną akcją aktualizacji, a pola są opcjonalne, o ile to możliwe.

Mogą istnieć wyjątki od tego (na przykład, jeśli zaktualizujesz hasło, którego oczekujesz, hasło i hasło_potwierdzenie), ale tak jest w większości przypadków.

Bardziej prawdopodobne jest, że wyjątkami są kontrolery, które mają ograniczone działania dla niektórych zasobów, takie jak SessionsController, który można tylko tworzyć i niszczyć. Jest bardzo mało prawdopodobne, że chcesz mieć działania dla pojedynczych pól.

W twoim przykładzie jedną rzecz można traktować jako własny zasób, a mianowicie adres. Jeśli masz tabelę adresów, szczególnie jeśli na klienta przypada więcej niż jeden adres (fakturowanie, dostawa ...), można to potraktować jako zasób zagnieżdżony. Ale znowu jedna akcja aktualizacji dla całego zasobu adresu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.