Una alternativa a CMIS
para que aplicaciones de terceros consuman recursos documentales en
Nuxeo, e independientemente de la tecnología utilizada para su
desarrollo, es REST (Representational State Transfer). La capa REST de
Nuxeo proporciona una serie de RESTlets que nos permiten consumir
recursos via url/http. Un ejemplo de esto, tal y como ya se comentó
aquí son
los restlets de búsquedas en Nuxeo via querymodel. Pero hay
algunos otros, que proporciona Nuxeo DM para operaciones básicas CRUD.
Uno de ellos es el browse reslet o restlet de navegación. Con la
sintaxis de la siguiente URL obtenemos los objetos en el de Nuxeo por
debajo de un folder-id:
http://<host>:<port>/nuxeo/restAPI/<repository>/<id>/browse
donde <repository>, es el repositorio de Nuxeo que
estamos inspeccionando y el <id> el id del documento-objeto documental.
El resultado es un XML como este:
<document title="8dab0cb7-e370-4879-8d77-af9af89844a5" type="Root" id="8dab0cb7-e370-4879-8d77-af9af89844a5" url="/default/"> <document title="Default domain" type="Domain" id="b78636a6-bcd9-446c-aa38-efe0ae36cdb6" name="default-domain" url="/default/b78636a6-bcd9-446c-aa38-efe0ae36cdb6"/> <document title="Test domain" type="Domain" id="5c09f35c-fae2-4bdf-9cb9-533d75ac9bd9" name="test-domain" url="/default/5c09f35c-fae2-4bdf-9cb9-533d75ac9bd9"/> <document title="My domain" type="Domain" id="71d35bdf-d3d3-46f4-a886-7fdda0cf02b0" name="my-domain" url="/default/71d35bdf-d3d3-46f4-a886-7fdda0cf02b0"/> </document>
El atributo id nos permite navegar por los diferentes espacios
de trabajo de tipo Folder o derivados (Domains, Workspaces…). De
este modo, para navegar por el repositorio de Nuxeo desde python via
url necesito autenticarme e invocar el restlet anterior y parsear el
xml. En unas pocas líneas con python utilizando urllib2 y
minidom:
import urllib import urllib2 def urlopen_auth_method(theurl, username, password, postdata=''): # Auth passman = urllib2.HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, theurl, username, password) authhandler = urllib2.HTTPBasicAuthHandler(passman) opener = urllib2.build_opener(authhandler) urllib2.install_opener(opener) # Post if (postdata): f = urllib2.urlopen(theurl, postdata) else: f = urllib2.urlopen(theurl) return f # Connection data username = 'Administrator' password = 'Administrator' # Browse repository (default repository) url1 = 'http://baco.zylk.net:8080/nuxeo/restAPI/default/*/browse' # Auth connection and f = urlopen_auth_method(url1, username, password) # Parse response xml = f.read() xmldoc = minidom.parseString(xml.decode("latin-1")) for node in xmldoc.getElementsByTagName('document'): print node.getAttribute('title')
Por otra parte, se puede crear contenido de Nuxeo via reslet:
http://baco.zylk.net:8080/nuxeo/restAPI/default/2d7f81c7-cd05-451d-968b-17ef3dc8792f/createDocument?docType=File&dublincore:title=test&dublincore:description=testing
<document> <repository>default</repository> <docRef>9c7a8c34-229d-4957-82d4-0daa84c642b9</docRef> <docTitle>test</docTitle> <docPath>/default-domain/workspaces/test</docPath> </document>
y actualizarlo,
http://baco.zylk.net:8080/nuxeo/restAPI/default/2d7f81c7-cd05-451d-968b-17ef3dc8792f/updateDocumentRestlet?dublincore:description=nice
o borrarlo:
http://baco.zylk.net:8080/nuxeo/restAPI/default/2d7f81c7-cd05-451d-968b-17ef3dc8792f/deleteDocumentRestlet
También podemos añadir un documento con el restlet de upload:
http://baco.zylk.net:8080/nuxeo/restAPI/default/9c7a8c34-229d-4957-82d4-0daa84c642b9/test.txt/upload
Y también podemos hacer búsquedas, además del mencionado
querymodel, tenemos las búsquedas por opensearch:
http://baco.zylk.net:8080/nuxeo/restAPI/opensearch?q=nuxeo
Además de los comentados, también estan los restlets de
exportación y bloqueo de un documento, así como del denominado Restlet
Pack, relativos a los vocabularios, sindicación, workflows, o el mismo
query model de búsquedas. Os dejo un par de enlaces:
Enlaces:
- http://www.nuxeo.org/xwiki/bin/view/Main/RestletTutorial
- http://doc.nuxeo.org/5.3/books/nuxeo-book/html/nuxeo-restlet-api.html