Open IT Experts for Enterprise

Zylk empresa de desarrollo de ecommerce

Pruebas con Nuxeo REST desde python

Cesar Capillas
Cesar Capillas

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

Si te ha parecido interesante comparte este post en RRS

Facebook
LinkedIn
Telegram
Email

Leer más sobre temas relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *