sql >> Database teknologi >  >> NoSQL >> MongoDB

Er der nogen grunde til, at jeg bør/ikke bør bruge ObjectId'er i mine RESTful url'er

Efter at have brugt ObjectId s i RESTful API'er flere gange, er den største ulempe egentlig, at de er meget støjende i forhold til at have en ren URL. Du vil enten lade det være et HEX-tal eller konvertere det til et meget stort heltal, hvilket begge giver en noget uvenlig URL:

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

Jeg har tilføjet en "titel" til URL'en (som StackOverflow gør) for at gøre dem lidt mere venlige:

    /rest/resource/52435dbecb970072ec3a780f/FriendlyResourceName

Selvfølgelig ignoreres "titlen" i software, men brugeren ser den og kan mentalt ignorere det skøre ID-segment.

Der er meget lidt nyttigt, man kunne lære af infrastrukturen ved at afsløre dem:

  1. Tidsstempel
  2. Maskin-id
  3. Proces-id
  4. Vældig stigende værdi

Andet end potentielt indsamling af maskin-id'er (som generelt ville angive antallet af klienter, der opretter ObjectId s), der er ikke meget der.

ObjectId s er ikke tilfældige, så du kunne ikke bruge dem af sikkerhedsmæssige årsager. Du skal altid sikre dataene. Selvom de måske ikke stiger på en indlysende måde, ville det være nemt at finde andre ressourcer gennem brute force. Men hvis du tidligere brugte auto-incrementing ID'er, er dette ikke et nyt problem for dig.

Hvis du ved, at du ikke opretter mange nye dokumenter på et givet tidspunkt, kan det være værd at bruge et af mønstrene her til at oprette et enklere ID. I en app, jeg skrev, brugte jeg en auto-inc-teknik til nogle af de dokument-id'er, der blev vist i URL'er, og for dem, der kun var Ajax-kun, brugte jeg ObjectId s. Jeg ville virkelig gerne have, at nogle URL'er nemt kunne "skrives". Ingen form for ObjectId er let indtastet af en slutbruger. Det er en af ​​styrkerne ved MongoDB -- at du kan bruge enhver _id format du ønsker. :)



  1. Redis vs. MongoDB:Sammenligning af In-Memory-databaser med Percona Memory Engine

  2. 'session' er udefineret, når du bruger express / redis til session store

  3. Få $elemMatch (projektion) til at returnere alle objekter, der matcher kriterier

  4. Hvordan designer man redis pub/sub til et onlinemeddelelsessystem?