Який правильний спосіб вкладати ресурси в модель REST?


14

Я розробляю REST API сервісу і застряг на належному шляху гніздування ресурсів.

Ресурси: партнери, квитки, налаштування

Зв'язки між ресурсами:

  • партнер має багато квитків,
  • партнер встановив налаштування,

Бізнес-логіка:

  • ви можете перелічити всіх партнерів як анонімного користувача,
  • ви можете додати новий квиток вказаному партнеру як анонімний користувач,
  • тільки партнер може перелічити свої квитки,
  • тільки партнер може змінювати свої квитки,
  • лише партнер може перелічити налаштування,
  • тільки партнер може змінювати налаштування,

Що я робив до цього часу:

Ресурси партнера

GET / партнерів - перерахуйте всіх партнерів
GET / партнерів /: id - покажіть деталі партнера, вказані: параметр id
GET / партнери /: partner_id / квитки - список квитків партнера
GET / партнери /: partner_id / квитки /: id - деталі вказаного квитка партнера
POST / partners /: partner_id / квитки - зберігає новий квиток
PUT / partner /: partner_id / Tickets /: id - оновляє квиток, визначений за параметром id
GET / partners /: partner_id / settings - список налаштувань партнера
PUT / partners /: partner_id / settings - оновіть налаштування партнера

Проблема / питання

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

Напр

GET / квитки /: id
POST / квитки
PUT / квитки /: id

GET / налаштування
PUT / налаштування

Відповіді:


8

HATEOAS :

GET /partners/:partner_id/tickets - список квитків партнера, тобто повертає список URI, ймовірно, форми /tickets/:id

GET /partners/:partner_id/tickets/:id - не потрібно

POST /partners/:partner_id/tickets - створює квиток і зв'язується з партнером, повертає 201 з новим URI форми /tickets/:id


2
Тепер я більше розумію. Велике спасибі :) Але як щодо виступу? Припустимо таку ситуацію: ви хочете створити список квитків з короткою інформацією. Ви повинні запитувати список квитків для партнера, а після цього запитувати кожен квиток індивідуально. Я правий?
Пшемек

ну так. або ви можете зробити /partners/:partner_id/ticketsсписок, який містить корисні дані для кожного квитка, а не лише канонічний URI квитка. Наприклад, у JSON це може бути [{href='/tickets/12',value=10,due='2013-08-13'},{href='/tickets/18',value=7,due='2013-09-02'}], тож клієнт міг одразу показати якусь таблицю, а GET / PUT - повний ресурс квитків для додаткових маніпуляцій.
Хав'єр

ОК Ясно.
Пшемек

До речі. Для / партнерів /: partner_id / квитки повинні бути надані документи в розділі партнера або ресурсів квитків?
Пшемек

@Javier, що про DELETE? DELETE /tickets/:id?
Менґді Гао
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.