2017-03-09 7 views
0

mein REST API Format:REST url richtige Format

http://example.com/api/v1.0/products - get all products 
http://example.com/api/v1.0/products/3 - get product with id=3 

Auch können die Produkte orginized in ein Produktgruppen werden.

Was ist eine richtige Art und Weise alle Produktgruppen nach REST Best Practices zu erhalten:

http://example.com/api/v1.0/products/groups 

oder

http://example.com/api/v1.0/productgroups 

...

eine andere Möglichkeit?

Antwort

1

Ich kann nicht mit Rishabh Soni zustimmen, weil http://example.com/api/v1.0/products/groups zu Zweideutigkeit führen kann.

Ich würde mein Geld auf http://example.com/api/v1.0/productgroups oder noch besser http://example.com/api/v1.0/product_groups setzen (bessere Lesbarkeit).

Ich habe ähnliche Diskussion hier: Updating RESTful resources against aggregate roots only

Frage: Über die Sache von/Produkte/Funktionen oder/Produkt-Features, gibt es einen Konsens über das? Kennen Sie eine gute Quelle, um sicherzustellen, , dass es nicht nur eine Frage des Geschmacks ist?

Antwort: Ich denke, das ist irreführend. Ich würde erwarten, alle Funktionen in allen Produkten zu erhalten, anstatt alle möglichen Funktionen zu erhalten. Aber ehrlich zu sein, dann ist es schwer, eine Quelle direkt über dieses Problem sprechen zu finden, aber es gibt eine Reihe von Artikeln, in denen Menschen zu nicht versuchen, wie/Produkten/Funktionen verschachtelt Ressourcen zu schaffen, aber tun, um diese separately .

So können wir nicht sicher sein, http://example.com/api/v1.0/products/groups alle möglichen Gruppen zurückkehren oder nur alle Gruppen, die mit allen bestehenden Produkten verbunden sind (was ist mit einer Gruppe, die mit dem Produkt verbunden wird noch nicht?).

Um diese Mehrdeutigkeit zu vermeiden, können Sie einige Anmerkungen in der Dokumentation hinzufügen. Aber Sie können nur vorbereiten http://example.com/api/v1.0/product_groups und alles ist klar.

+0

Es gibt keine allgemeine Regel, aber schauen Sie sich diese beiden Microsoft Azure Rest Api URL, gleiche bis Op.- https://management.azure.com/subscriptions/$subs/resourceGroups/$resGrp/providers/Microsoft.Compute/virtualMachines/rishabhvm/start? api-version = 2015-05-01 https://management.azure.com/subscriptions/$subs/resourceGroups/$res_grp/providers/Microsoft.Compute/virtualMachines/rishabhvm?api-version=2015 -05-01 Und für eine andere Instanz denke, wenn er später Informationen über ein anderes Element in der Entität "Produkt" abrufen möchte. Dadurch musste er ein anderes Keyword für verschiedene Elemente in derselben Kategorie erstellen. –

+0

@RishabhSoni Es ist nicht der gleiche Fall. Ein Beispiel aus Azure zeigt das Muster '/ resources/$ id/sub_resource/$ subresource_id/...' Die Frage bezieht sich auf '/ resources/subresources'. Um Informationen über eine Unterquelle zu erhalten: '/ products/$ id/product_group'. Ein anderes: '/ products/$ id/price' und so weiter. 'Product_groups' ist ein Wörterbuch. Können Sie Komplikationen erklären? Ich bin mir nicht sicher, ob wir über denselben Punkt sprechen. –

+0

@RishabhSoni 'Product_groups' ist ein Wörterbuch. '/ products/$ id/product_group' könnte einen Link zu' product_groups/$ id' enthalten. Beziehungen zwischen Ressourcen, das ist eine Essenz der Ruhe. –

1

Wenn Sie Rest API für Ihre Kunden entwickeln, sollten Sie sich nicht auf IDs verlassen. Erstellen Sie stattdessen eine sinnvolle Abkürzung und ordnen Sie sie der tatsächlichen ID auf der Serverseite zu.

Wenn das nicht möglich ist, können Sie http://example.com/api/v1.0/products/3http://example.com/api/v1.0/products?product_id=3 verwenden und dann können Sie "product_id" Beschreibung in der Dokumentation bereitstellen. den Kunden im Grunde sagen, wie man product_id benutzt. Kurz gesagt, eine URL muss sinnvoll sein und einem Muster folgen. Der variable Teil muss in der Url-Abfrage (Teil nach? Oder POST-Payload) gesendet werden.

Hierbei ist auch die Methode zur Abfrage des Servers wichtig. Wenn der Client versucht, etwas auf den Server zu bekommen, sollte er die HTTP-Anfrage "GET" verwenden, eine ähnliche POST-HTTP-Anfrage, wenn er neue Informationen hochlädt und die "PUT" -Anfrage, wenn er eine neue Ressource aktualisiert oder erstellt.

Also durch diese Analogie http://example.com/api/v1.0/products/groups ist geeigneter, da es ein Muster folgt (Gruppen im Produkt), während Produktgruppen eher wie ein Schlüsselwort ohne Muster ist.

Ein Verzeichnis wie Muster ist leichter zu verstehen. Wie bei Dateisystemen (C: \ Programme \ WinRAR) bringt uns jeder Teil zu einem allgemeineren Ziel.

Sie können dies auch für bestimmte gruppen- anpassen http://example.com/api/v1.0/products/groups?id=3

+0

Danke für Ihre Antwort, aber meine Frage war hauptsächlich über '/ Produkte/Gruppen' vs '/ Produktgruppen' Muster und Regeln, wie dies zu bestimmen. – alexanoid

+0

@alexanoid, sehen Sie, ob die Bearbeitung Ihre Abfrage löst. –