MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Gibt es Gründe, warum ich ObjectIds in meinen RESTful-URLs verwenden sollte/sollte?

Nachdem ObjectId verwendet wurde s in RESTful-APIs mehrmals verwendet wird, ist der größte Nachteil wirklich, dass sie sehr laut sind, wenn es darum geht, eine saubere URL zu haben. Sie lassen es entweder als HEX-Zahl oder wandeln es in eine sehr große Ganzzahl um, was beides zu einer etwas unfreundlichen URL führt:

/rest/resource/52435dbecb970072ec3a780f
/rest/resource/25459211534898951476729247759

Ich habe der URL einen "Titel" hinzugefügt (wie es StackOverflow tut), um sie etwas freundlicher zu gestalten:

    /rest/resource/52435dbecb970072ec3a780f/FriendlyResourceName

Natürlich wird der "Titel" in der Software ignoriert, aber der Benutzer sieht ihn und kann das verrückte ID-Segment mental ignorieren.

Es gibt sehr wenig Nützliches, das man aus der Infrastruktur lernen könnte, indem man sie offenlegt:

  1. Zeitstempel
  2. Maschinen-ID
  3. Prozess-ID
  4. Zufälliger inkrementierender Wert

Abgesehen vom potenziellen Sammeln von Maschinen-IDs (die im Allgemeinen die Anzahl der Clients angeben würden, die ObjectId erstellen s), da ist nicht viel drin.

ObjectId s sind nicht zufällig, also könnten Sie sie nicht aus Sicherheitsgründen verwenden. Sie müssen die Daten immer sichern. Während sie sich möglicherweise nicht auf offensichtliche Weise erhöhen, wäre es einfach, andere Ressourcen durch rohe Gewalt zu finden. Wenn Sie jedoch zuvor IDs mit automatischer Erhöhung verwendet haben, ist dies kein neues Problem für Sie.

Wenn Sie wissen, dass Sie zu einem bestimmten Zeitpunkt nicht viele neue Dokumente erstellen, kann es sich lohnen, eines der Muster hier zu verwenden, um eine einfachere ID zu erstellen. In einer von mir geschriebenen App habe ich eine Auto-Inc-Technik für einige der Dokument-IDs verwendet, die in URLs angezeigt wurden, und für diejenigen, die nur Ajax waren, habe ich ObjectId verwendet s. Ich wollte wirklich, dass einige URLs einfach "getippt" werden können. Keine Form einer ObjectId kann leicht von einem Endbenutzer eingegeben werden. Das ist eine der Stärken von MongoDB – dass Sie jede _id verwenden können gewünschten Format. :)