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:
http://<host>:<port>/nuxeo/restAPI/<repository>/<id>/browse
<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
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/2d7f81c7-cd05-451d-968b-17ef3dc8792f/updateDocumentRestlet?dublincore:description=nice
http://baco.zylk.net:8080/nuxeo/restAPI/default/2d7f81c7-cd05-451d-968b-17ef3dc8792f/deleteDocumentRestlet
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:
http://baco.zylk.net:8080/nuxeo/restAPI/default/9c7a8c34-229d-4957-82d4-0daa84c642b9/test.txt/upload
http://baco.zylk.net:8080/nuxeo/restAPI/opensearch?q=nuxeo
Enlaces: