Насколько дискретным должен быть RESTful API?


12

Я никогда не создавал RESTful API и мне интересно, насколько дискретным он должен быть?

Например, допустим, у меня есть клиент, у которого есть имя, адрес, номер телефона, адрес электронной почты, язык и т. Д.

Имеет ли смысл обновлять каждое отдельное поле (адрес обновления, адрес электронной почты и т. Д.), Или должно быть только одно обновление для всего клиента, и каждое поле является необязательным?


3
Какую часть REST вы хотите? Если вам просто нужен простой API, не беспокоящийся о стандартах, вы можете справиться с ним, как принятый ответ Торстена Мюллера. Если вы хотите настоящий ОТДЫХ, вам нужно искать Роя Филдинга (например, диссертацию). Он изобретатель ОТДЫХА. Вы увидите, что, например, идея о том, что ресурс == таблица не соответствует действительности. Вы также обнаружите, что, например, для вашего вопроса довольно часто используется HTTP-метод PATCH для обновления одного или нескольких полей. Где метод POST или PUT (много споров здесь) может использоваться для полного обновления ресурса.
Люк Франкен

Ответы:


17

У вас есть одно действие обновления для ресурса. Как правило, таблица в вашей базе данных будет ресурсом. Таким образом, в вашем примере есть один контроллер для Клиента с одним действием обновления, и поля являются необязательными, насколько это возможно.

Могут быть исключения из этого (например, если вы обновляете пароль, вы ожидаете password & password_confirmation), но это справедливо для большинства случаев.

Более вероятно, что исключениями являются контроллеры, которые имеют ограниченные действия для некоторых ресурсов, например, SessionsController, который можно только создавать и уничтожать. Маловероятно, что вы захотите иметь действия для отдельных полей.

В вашем примере одна вещь может быть обработана как собственный ресурс, и это адрес. Если бы у вас была таблица адресов, особенно если на одного клиента было бы более одного адреса (выставление счетов, доставка ...), это можно было бы использовать как вложенный ресурс. Но снова одно действие по обновлению для всего ресурса адреса.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.