Efter att ha använt ObjectId
s i RESTful APIs flera gånger, är den största nackdelen egentligen att de är väldigt bullriga när det gäller att ha en ren URL. Du lämnar det antingen som ett HEX-nummer eller konverterar det till ett mycket stort heltal, vilket båda ger en något ovänlig URL:
/rest/resource/52435dbecb970072ec3a780f
/rest/resource/25459211534898951476729247759
Jag har lagt till en "titel" till URL:en (som StackOverflow gör) för att göra dem lite mer vänliga:
/rest/resource/52435dbecb970072ec3a780f/FriendlyResourceName
Naturligtvis ignoreras "titeln" i programvara, men användaren ser den och kan mentalt ignorera det galna ID-segmentet.
Det finns väldigt lite användbart som kan läras av infrastrukturen genom att exponera dem:
- Tidsstämpel
- Maskin-ID
- Process ID
- Slumpmässigt ökande värde
Annat än att potentiellt samla maskin-ID:n (vilket i allmänhet skulle indikera antalet klienter som skapar ObjectId
s), det finns inte mycket där.
ObjectId
s är inte slumpmässiga, så du kunde inte använda dem för säkerhets skull. Du måste alltid säkra data. Även om de kanske inte ökar på ett uppenbart sätt, skulle det vara lätt att hitta andra resurser genom brute force. Men om du använde auto-inkrementerande ID:n tidigare är detta inte ett nytt problem för dig.
Om du vet att du inte skapar många nya dokument vid en given tidpunkt kan det vara värt att använda ett av mönstren här för att skapa ett enklare ID. I en app jag skrev använde jag en auto-inc-teknik för några av dokument-ID:n som visades i webbadresser, och för de som endast var Ajax använde jag ObjectId
s. Jag ville verkligen att vissa webbadresser skulle vara lätta att "skriva". Ingen form av ObjectId
är lätt att skriva av en slutanvändare. Det är en av styrkorna med MongoDB -- att du kan använda vilken _id
som helst format du vill ha. :)