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:
- Shopify: 9-stellige Zahlen
- Twilio: 34 Zeichenketten
- Twitter: mehr als 20-stellige Zahlen
- AMEE: 12 Zeichen A-Z0-9
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?
Antworten:
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.
quelle
Ich denke, Sie könnten hier die vier Hauptoptionen in Betracht ziehen:
Verwenden Sie die UUID als Primärschlüssel für Ihre Datenbank. Dies kann jedoch rechenintensiver sein als die Verwendung von Long
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
Erstellen Sie eine alternative Schlüsselspalte in Ihren Datenbanktabellen, um die UUID-Werte zu speichern.
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.
quelle