Wie können Ressourcen im REST-Modell ordnungsgemäß verschachtelt werden?


14

Ich entwerfe eine REST-API des Dienstes und bin auf dem richtigen Weg zum Verschachteln von Ressourcen hängen geblieben.

Ressourcen: Partner, Tickets, Einstellungen

Verbindungen zwischen Ressourcen:

  • Partner hat viele Tickets,
  • Partner hat eine Reihe von Einstellungen,

Geschäftslogik:

  • Sie können alle Partner als anonymen Benutzer auflisten,
  • Sie können dem angegebenen Partner ein neues Ticket als anonymer Benutzer hinzufügen.
  • Nur der Partner kann seine Tickets auflisten.
  • Nur der Partner kann seine Tickets ändern.
  • Nur Partner können Einstellungen auflisten.
  • Nur der Partner kann die Einstellungen ändern.

Was ich bis jetzt gemacht habe:

Partnerressourcen

GET / partners - listet alle Partner auf
GET / partners /: id - zeigt Details des Partners an, angegeben durch: id-Parameter
GET / partners /: partner_id / tickets - listet Tickets des Partners auf
GET / partners /: partner_id / tickets /: id - details des angegebenen Partnertickets
POST / partners /: partner_id / tickets - speichert neues Ticket
PUT / partners /: partner_id / tickets /: id - aktualisiert das Ticket, angegeben durch: id-Parameter
GET / partners /: partner_id / settings - listet die Partnereinstellungen
PUT auf / partners /: partner_id / settings - Aktualisiert die Einstellungen des Partners

Problem / Frage

Wäre es richtig, verschachtelte Ressourcen (Tickets, Einstellungen) zu teilen, um Ressourcen zu trennen, oder sie als separate Ressourcen zu duplizieren?

Z.B

GET / tickets /: id
POST / tickets
PUT / tickets /: id

GET / settings
PUT / settings

Antworten:


8

HATEOAS :

GET /partners/:partner_id/tickets - Liste der Tickets des Partners, dh eine Liste der URIs, wahrscheinlich in der Form /tickets/:id

GET /partners/:partner_id/tickets/:id - nicht benötigt

POST /partners/:partner_id/tickets - Erstellt ein Ticket und verbindet sich mit dem Partner. Gibt eine 201 mit der neuen URI des Formulars zurück /tickets/:id


2
Jetzt verstehe ich mehr. Vielen Dank :) Aber was ist mit der Leistung? Nehmen wir diese Situation an: Sie möchten eine Liste von Tickets mit einigen Kurzinformationen erstellen. Sie müssen eine Liste der Tickets für den Partner anfordern und danach jedes Ticket einzeln anfordern. Habe ich recht?
— Przemek

Nun ja. Sie können auch festlegen, dass die /partners/:partner_id/ticketsListe einige nützliche Daten für jedes Ticket enthält, nicht nur die kanonische URI des Tickets. In JSON könnte dies beispielsweise der Fall sein [{href='/tickets/12',value=10,due='2013-08-13'},{href='/tickets/18',value=7,due='2013-09-02'}], sodass der Client sofort eine Tabelle anzeigen und die vollständigen Ticketressourcen für zusätzliche Manipulationen abrufen / eingeben kann.
— Javier

OK Es ist klar.
— Przemek

BTW. Für / partners /: partner_id / tickets sollten Dokumente im Bereich Partner- oder Ticketressourcen bereitgestellt werden?
— Przemek

@Javier was ist mit DELETE? DELETE /tickets/:id?
— Mengdi Gao
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.