sql >> Databáze >  >> NoSQL >> MongoDB

Existují nějaké důvody, proč bych měl/neměl používat ObjectId v mé RESTful url

Po použití ObjectId s RESTful API několikrát, největší nevýhodou je opravdu to, že jsou velmi hlučné, pokud jde o čistou adresu URL. Buď ho necháte jako HEX číslo, nebo ho převedete na velmi velké celé číslo, obojí způsobí poněkud nepřátelskou adresu URL:

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

K adrese URL jsem přidal „název“ (jako to dělá StackOverflow), aby byly o něco přátelštější:

    /rest/resource/52435dbecb970072ec3a780f/FriendlyResourceName

Samozřejmě, že "titul" je v softwaru ignorován, ale uživatel to vidí a může mentálně ignorovat šílený segment ID.

Je velmi málo užitečného, ​​co by se dalo naučit z infrastruktury tím, že je odhalíme:

  1. Časové razítko
  2. ID počítače
  3. ID procesu
  4. Náhodné zvýšení hodnoty

Kromě potenciálního shromažďování ID strojů (což by obecně znamenalo počet klientů vytvářejících ObjectId s), není toho moc.

ObjectId s nejsou náhodné, takže je nelze použít pro zabezpečení. Vždy budete muset data zabezpečit. I když se nemusí zvyšovat zjevným způsobem, bylo by snadné najít jiné zdroje pomocí hrubé síly. Pokud jste však dříve používali automatické zvyšování ID, není to pro vás nový problém.

Pokud víte, že v daný okamžik nevytváříte mnoho nových dokumentů, může být užitečné použít některý ze zde uvedených vzorů k vytvoření jednoduššího ID. V jedné aplikaci, kterou jsem napsal, jsem použil techniku ​​automatického vkládání pro některá ID dokumentů, která se zobrazovala v adresách URL, a pro ty, které byly pouze pro Ajax, jsem použil ObjectId s. Opravdu jsem chtěl, aby se některé adresy URL snadno „zadávaly“. Žádná forma ObjectId je snadno zadáván koncovým uživatelem. To je jedna ze silných stránek MongoDB – že můžete použít jakékoli _id požadovaný formát. :)



  1. mongodb $exists vždy vrací 0

  2. Jak se dotazovat na kolekci dílčích dokumentů pomocí ovladače MongoDB a C#

  3. Chyba Redigo ScanStruct s time.Time

  4. Počítejte výsledky s MongoDB 3.0 Java Driver