2016-11-25 5 views
1

Ich arbeite an einem Projekt, das Micro-Services-Architektur verwendet.Rest API Design für Order Management System

Es gibt zwei Dienste an:

  1. UserAPI: alle, was zu benutzerbezogenen kommen hier.
  2. OMS: Alle mit Order verbundenen Sachen Komm her.

Ich brauche Aufträge zu schaffen, basierend auf folgenden Filter:

  1. durch Benutzer-ID
  2. Veröffentlichung
  3. nach Status
  4. Nach User-Telefonnummer
  5. Mischung von oben

Also ich erstelle ein n API

path/orders?date=12/11/2016&status=delivered&phone=1111111111 

Jetzt muss ich Bestellungen für Benutzer nach Benutzer-ID bereitstellen. So was gut Rest Design:

  1. Add Benutzer-ID in Abfrage param in bestehenden API wie path/orders?user_id=1
  2. Erstellen Ihnen einen separaten API Pfad user/{user_id}/orders

Antwort

1

Ihre beiden Optionen in Ordnung sind. Aber es gibt unterschiedliche Semantiken.

path/orders?user_id=1 

Dies ist auf Bestellungen. Zum Beispiel könnten Bestellungen nach einer statistischen Analyse gesucht werden. Die Aufträge können nach verschiedenen Parametern gefiltert werden, wobei die Benutzer-ID eine davon ist. Für diese (wenn die Aufträge das Hauptinteresse ist) ist die obige URI-Strategie in Ordnung.

Jetzt auf der anderen Seite möchten Sie vielleicht einen Benutzer nachschlagen und ihre Bestellungen sehen. Vielleicht, um ihre Bestellgewohnheiten zu analysieren. Hier möchten Sie Benutzerinformationen zusammen mit ihren Bestellungen. Dies ist, wo Ihr zweites URI-Schema besser wäre

user/{user_id}/orders 

Dies sind die Aufträge, dass den Benutzer gehört. So ist es eine Beziehung. Dies ist, wo dieses URI-Schema besser funktioniert.

Also wirklich nichts ist falsch mit beiden Optionen. Sie müssen nur der Semantik folgen, wann jedes verwendet werden soll.