Наскільки дискретним повинен бути API RESTful?


12

Я ніколи раніше не будував API RESTful і мені цікаво, яким він повинен бути дискретний?

Наприклад, скажімо, що у мене є клієнт, який має ім’я, адресу, номер телефону, електронну адресу, мову тощо.

Чи є сенс, що існує спосіб оновлення кожного окремого поля (адреса оновлення, адреса оновлення електронної пошти тощо), або має бути лише одне оновлення для всього клієнта, і кожне поле є необов’язковим?


3
Яку частину REST ви хочете? Якщо вам просто потрібен простий API, не турбуючись про стандарти, ви можете впоратися з ним так само, як прийнята відповідь Thorsten müller. Якщо ви хочете справжнього REST, вам потрібно шукати Роя Філдінга (+ дисертація, наприклад). Він винахідник REST. Ви побачите, що, наприклад, ідея, що ресурс == таблиця, не є правдою. Ви також виявите, що, наприклад, для вашого питання метод PATCH HTTP досить часто використовується для оновлення одного або декількох полів. Де метод POST або PUT (тут багато дискусій) можна використовувати для повних оновлень ресурсу.
Люк Франкен

Відповіді:


17

У вас є одна дія оновлення ресурсу. Як грубе правило, таблиця у вашій базі даних буде ресурсом. Отже, у вашому прикладі є один контролер для Клієнта з однією дією оновлення, і поля необов’язкові, наскільки це можливо.

З цього можуть бути винятки (наприклад, якщо ви оновлюєте пароль, ви очікуєте пароль і підтвердження пароля), але це стосується більшості випадків.

Більш імовірно, що винятки становлять контролери, які мають обмежені дії для деяких ресурсів, як-от SessionsController, який може бути створений і знищений. Дуже ймовірно, що ви хотіли б мати дії для окремих полів.

У вашому прикладі одне може розглядатися як власний ресурс, а це адреса. Якщо у вас буде таблиця адрес, особливо якщо на кожного клієнта буде більше однієї адреси (виставлення рахунків, доставка ...), це може оброблятися як вкладений ресурс. Але знову-таки одна дія оновлення для всього адресного ресурсу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.