Sollte ich UUIDs für Ressourcen in meiner öffentlichen API verwenden?

76

Ich erstelle eine SaaS-Anwendung und möchte IDs für Ressourcen verfügbar machen, die nicht an meine aktuelle Datenspeicherimplementierung gebunden sind (Postgres-IDs für die automatische Inkrementierung). Diese Stapelüberlauf-Posts ( eins zwei ) legen nahe, dass das Erstellen lokal eindeutiger IDs schwierig ist und dass ich genauso gut UUIDs verwenden kann, die natürlich einfach und sicher in so ziemlich jeder Sprache generiert werden.

Ich bin mit diesem Ansatz zufrieden, aber ich frage mich, warum ich keine APIs von großen SaaS / gehosteten Playern finden kann, die dasselbe tun. Zum Beispiel:

Grundsätzlich scheint also niemand UUIDs zu verwenden. Gibt es einen Grund dafür - hier nicht erfunden, cleverere interne ID-Algorithmen oder etwas anderes? Und ist es in meinem Fall am sinnvollsten, UUIDs zu verwenden, wenn kein interner Algorithmus vorhanden ist?

Alex Dean
quelle
1
Upvote für eine tolle Frage! Wie sind die Ergebnisse ausgefallen? Haben Sie sie in einer separaten Spalte gespeichert?
David S
3
Hallo David, ja am Ende habe ich UUIDs verwendet und sie in einer separaten Spalte gespeichert!
Alex Dean
Ich mache genau das gleiche
Casey Flynn
Die AMEE Link sind tot, können aber jetzt hier gefunden werden
Michael Sørensen

Antworten:

38

Es ist möglich, dass diese anderen Anbieter, die Sie aufgelistet haben, über eine eigene ID oder ein eigenes Hashing-Schema verfügen, damit sie eine kleinere Anzahl verfügbar machen können, während sie intern etwas verwenden, das einer UUID ähnlicher ist. Aber am Ende muss die Frage gestellt werden: Solange Ihre URIs eher von Code (API-Clients) als von Menschen verwendet werden sollen, warum sollte das wichtig sein?

Lassen Sie sich nicht zu sehr von dem ausflippen, was diese Anbieter getan haben. Es gibt keine Garantie dafür, dass (a) sie das "Richtige" tun und (b) dass ihre Bedürfnisse dieselben sind wie Ihre.

Fahren Sie fort und verwenden Sie UUIDs.

Brian Kelly
quelle
1
Danke Brian, ja, ich werde mit UUIDs weitermachen
Alex Dean
10

Ich denke, Sie könnten hier die vier Hauptoptionen in Betracht ziehen:

  1. Verwenden Sie die UUID als Primärschlüssel für Ihre Datenbank. Dies kann jedoch rechenintensiver sein als die Verwendung von Long

  2. Erstellen Sie eine UUID-zu-Long-Zuordnungsebene. Auf diese Weise können Sie Ihre REST-Ressourcen veröffentlichen, aber mit Long PK eine saubere Datenbankstruktur beibehalten

  3. Erstellen Sie eine alternative Schlüsselspalte in Ihren Datenbanktabellen, um die UUID-Werte zu speichern.

  4. Anstatt UUID zu verwenden, könnten Sie kryptografische IDs haben, die im laufenden Betrieb mit einem benutzerdefinierten Startwert für jeden Kunden und die ursprüngliche PK generiert werden. Dieser Ansatz verursacht mehr Ausführungsaufwand, kann jedoch in einigen Szenarien interessant sein. Der Kunde müsste immer verschlüsselte Daten verwenden, da er niemals Zugriff auf den Startwert oder den Algorithmus hat.

Alessandro Oliveira
quelle
1
Danke Alessandro!
Alex Dean