Ist es besser, wenn man eine REST-API auf einer subdomain oder in einem Unterordner?
Wir haben eine Webanwendung, die gehostet wird mit der URL http://example.com
. Jetzt wollen wir erweitern ein Teil dieser Anwendung als Rest-Dienst, und wir debattieren über die beste URL-Muster. Ich habe gesucht, aber konnte keine konkrete Anleitung.
Sollten wir die URL mit dem Muster http://api.example.com
oder http://exaple.com/api/v1
?
Gibt es eine standard-Anleitung für dies?
- Gibt es keine Erfahrung auf andere Vermögenswerte des Unternehmens, oder irgendwo sonst in der Entwicklung der Mannschaft? Entweder Wahl würde nur gut funktionieren.
- Beides sieht gut aus, In einem von unserem Projekt entschieden wir uns für
api.XXXXX.com
format - Auch wir hatten die gleiche Diskussion bei der Arbeit, gingen wir mit api.xxxx.com. Dieser Ansatz schien ordentlicher. Wir haben verschiedene set-up für die API-Cluster jetzt.
- Es gibt einen wichtigen Unterschied - api.example.com möchte hinzufügen, CORS-Anfragen, in der Erwägung, dass example.com/api nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hängt von Ihren Bedürfnissen ab.
Wenn Sie http://api.example.com es macht die API subdomain. Im Grunde, dieses URL-Muster ist gut, wenn der REST-service konsumiert werden, die von mehreren Kunden, aber wenn nur ein client verbunden ist, um Ihre API dann das Muster http://example.com/api/v1 ist gut. Jedoch, wenn Sie hinzufügen möchten mehr API mit mehr clients mit ihm verbunden, es ist besser http://example.com/api/v1. Betrachten Sie beispielsweise die folgenden.
Nicht zuletzt, PayPal verwendet das Muster http://example.com/api/v1.
https://api.[sandbox].paypal.com/v1/
MusterIch denke, Sie sollten weder
http://api.example.com
nochhttp://example.com/api/v1
.Stattdessen würde ich vorschlagen, mit
http://example.com/api
- und content-negotiation für die Versionsverwaltung.Hier sind meine Gedanken, warum:
Mit einer subdomain:
Pro die URI-Schema-Spezifikation, Sie bei der Definition der API in der Behörde Teil der URI, die verwendet wird, um zu definieren, Ihre Gastgeber, eher als die Definition einer Anwendung oder API auf Ihrem Rechner. Erstellen Sie in Wirklichkeit eine andere Adresse für Ihre API, was bedeutet, dass die Authentifizierung funktioniert möglicherweise nicht für api.example.com da es für example.com.
Einen triftigen Grund, dies zu tun wäre, wenn Sie entwerfen eine neue Instanz für mobile Geräte, z.B. mobile.example.com aber ich hielte diese mehr eine infrastrukturelle Entscheidung und nicht um eine funktionelle eine.
Über eine nicht-versionierte Pfad auf die Haupt-domain:
Gibt es zwei bits von Informationen hier: einer ist ein Indiz dafür, dass es eine API-Ressource und der zweite ist, dass es die Versionsnummer der API-Ressource (v1).
Gibt es nichts schlecht über die Verwendung von
/api/
um eine Unterscheidung zwischen den API-und, zum Beispiel, Ihre web-anzeigen, die möglicherweise die Ausführung unter/web/
. Diese können als gemeinsame best practice.Ich bin mir nicht sicher, ob du das beabsichtigt, aber deine Frage enthält eine Abfrage auf, wie zu lösen API-Versionierung. Ich persönlich denke, dass API-Versionierung sollte nicht getan werden mit URLs, wie Sie gedacht sind, stabil zu bleiben, so lange wie möglich. Coole URIs ändern sich nicht! Erwägen Sie stattdessen, die Verwendung von HTTP-Content-Type-information zur version der API. Ich fand diese Methode in Der VMware-Dokumentation. Zusätzlich ist hier eine ziemlich alte, aber immer noch nützlich, post über Inhalt, Art Versionierung von Peter Williams.
Dies ist ein Fall, der Kompromisse, keine einzige beste Lösung.
Zum Beispiel, wenn Ihr http://example.com/ bietet Inhalte, die über einen standard-web-Oberfläche sowie über die API, dann müssen Sie so etwas wie
http://api.example.com/api/<version>/<the usual resource pattern>
nur zu separaten browser-basierte Anwendung, die den Zugriff aus der API-Interaktion. Macht das Sinn?
Beispiel: api.rottentomatoes.com
Jedoch, selbst wenn Ihre domain ist speziell für API-Aufrufe, ist es sinnvoll, die oben genannten Muster sowieso, und behalten uns http://example.com/ für andere Möglichkeiten der Interaktion mit Ihrer Anwendung. Zum Beispiel, möchten Sie vielleicht http://example.com/mobile/, etc.