2010-08-31 5 views
2

Je me suis récemment intéressé à CouchDB et je voulais essayer de former une petite application autour d'elle.Validation des clés API dans CouchDB

La façon dont j'invoque actuellement mon système est que les demandes viennent avec deux choses, un identifiant, une clé API et un format. L'ID est le _id d'un document dans la base de données, la clé API est un _id d'un autre document qui a la propriété {"valide": vrai/faux}, et le format est le format qu'ils veulent récupérer. Si la clé d'API est valide, le système génère la page d'affichage pour l'ID donné, dans le format demandé. Sinon, il retournera un code de statistiques 403.

Malheureusement, je ne trouve pas un moyen de récupérer un autre document à partir d'une page d'affichage. Je commence juste CouchDB, alors peut-être qu'il y a quelque chose de simple ici qui me manque.

Répondre

4

Avec une fonction _show, il y a trois parties concernées:

  1. Le document de conception
  2. La fonction show à l'intérieur du document de conception
  3. Le document supplémentaire à afficher

Pour le format d'URL /db/_design/ddoc/_show/my_show_func/otherdoc:

  1. Le document de conception est _design/ddoc
  2. La fonction show est shows.my_show_func dans ce document de conception
  3. Le document à afficher a un _id de otherdoc

Ce sont les que deux documents concernés. La seule façon dont je peux penser à faire ce que vous décrivez est d'avoir un doc de conception par clé API. L'utilisateur interroge /db/_design/API_KEY/_show/other_doc_id. CouchDB est détendu. Il n'y a rien de mal avec des milliers de documents de conception avec _show fonctions identiques ou similaires. Vous pouvez utiliser la méthode HTTP COPY pour cloner un document de conception de base sur une nouvelle clé d'API si nécessaire. Vous pouvez ensuite révoquer une clé API en supprimant le document de conception. Cependant, c'est évidemment une approche unique, qui mérite une seconde réflexion. Une dernière considération est (avec le CouchDB par défaut, pas de proxys inverses, mod_security, etc.) si un utilisateur peut lire un document, ils peuvent lire la base de données entière (par exemple de la requête _all_docs.) Par conséquent, les fonctions show sont la commodité pour le logiciel mais pas une passerelle de sécurité.