RESTful
OpenKM dispone de una API completa expuesta mediante REST. Puede llamar a cualquier método de la API desde cualquier lenguaje de programación, como Java, PHP o Python. Esta característica permite crear un cliente personalizado o integrarse con aplicaciones de terceros, como un CRM o un CMS.
En la mayoría de los ejemplos verá parámetros llamados “docId”, “fldId” o “nodeId”. El valor de este parámetro puede ser un UUID de nodo válido (desde la versión 7.x, la mayoría de los métodos que aceptan una ruta están obsoletos).
Ejemplo de uso
Sección titulada «Ejemplo de uso»Puede utilizar una biblioteca de cliente HTTP o cualquier cliente REST para probar estos métodos de la API, lo que facilita el proceso. O bien puede utilizar la aplicación de línea de comandos curl. Por ejemplo, puede listar las carpetas hijas:
$ curl -u okmAdmin:admin -H "Accept: application/json" \ http://localhost:8080/openkm/rest/folders/de7b07c2-e707-4390-b5cc-cae340c8c3e5/childrenEl resultado es:
[ { "@type": "folder", "created": 1568408949000, "lastModified": 1568409037000, "path": "/okm:root/test/test", "author": "okmAdmin", "permissions": 31, "uuid": "0fd9f008-27e8-4980-a22b-d71c9a34060a", "parent": "de7b07c2-e707-4390-b5cc-cae340c8c3e5", "subscribed": false, "nodeClass": 0, "dispositionCurrentStage": 0, "subscriptors": [], "keywords": [], "categories": [], "notes": [], "linkTarget": null, "actualVersion": { "name": "1.1", "created": 1568409037000, "size": 0, "author": "okmAdmin", "actual": true, "comment": null, "checksum": null, "action": "PROPERTY_GROUP_ADDED", "params": "okg:consulting", "uuid": null, "parent": "0fd9f008-27e8-4980-a22b-d71c9a34060a" }, "promotedAsRecord": false, "hasRelations": false, "description": null, "restricted": false, "nodeClassChildren": [], "metadataLabel": null, "hasChildren": false, "style": 0 }]En este caso, puede ver el resultado en formato JSON.
Este es un cliente Java para la misma llamada:
package com.openkm;
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.Authenticator;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.PasswordAuthentication;import java.net.URL;
public class JavaRestClient {
public static void main(String[] args) throws Exception { try { String fldUuid = "de7b07c2-e707-4390-b5cc-cae340c8c3e5"; URL url = new URL("http://localhost:8080/openkm/rest/folders/" + fldUuid + "/children"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Accept", "application/json");
Authenticator.setDefault(new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("okmAdmin", "admin".toCharArray()); } });
if (conn.getResponseCode() == 200) { BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream()))); System.out.println("Output from Server .... \n"); String output;
while ((output = br.readLine()) != null) { System.out.println(output); } } else { System.err.println("Failed : HTTP error code : " + conn.getResponseCode()); }
conn.disconnect(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}Ejemplos de carpetas
Sección titulada «Ejemplos de carpetas»Crear una nueva carpeta:
$ curl -u okmAdmin:admin -H "Accept: application/json" \ -X POST -H "Content-Type: application/json" -d 'newfolder' \ http://localhost:8080/openkm/rest/folders/parents/fe239ae2-4d25-4d87-88b2-924d03b87faaRenombrar una carpeta:
$ curl -u okmAdmin:admin -H "Accept: application/json" \ -X PUT -H "Content-Type: application/x-www-form-urlencoded" \ -d 'newName=test2' \ http://localhost:8080/openkm/rest/folders/fe239ae2-4d25-4d87-88b2-924d03b87faa/nameEjemplos de documentos
Sección titulada «Ejemplos de documentos»Para crear un documento, debemos proporcionar los datos binarios del documento:
$ curl -u okmAdmin:admin -H "Accept: application/json" \ -X POST -F content=newDoc.txt -F content=@/home/openkm/doc1.txt \ http://localhost:8080/openkm/rest/documents/parents/fe239ae2-4d25-4d87-88b2-924d03b87faaO desde un formulario HTML:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document Upload</title></head><body> <form method="POST" enctype="multipart/form-data" action="http://localhost:8080/openkm/rest/documents/parents/fe239ae2-4d25-4d87-88b2-924d03b87faa"> Select file: <input type="file" name="content" size="45"/><br/> <input type="submit" value="Upload" /> </form></body></html>Para descargarlo:
$ curl -u okmAdmin:admin \ http://localhost:8080/openkm/rest/documents/dab830ea-2fa8-439f-837e-de15409d88b9/contentEjemplos de búsqueda
Sección titulada «Ejemplos de búsqueda»Búsqueda con parámetros:
$ curl -u okmAdmin:admin -H "Accept: application/json" -X GET \ http://localhost:8080/openkm/rest/search?keyword=test&name=doc*&mimeType=application/pdfBúsqueda con metadatos:
$ curl -u okmAdmin:admin -H "Accept: application/json" -X GET \ http://localhost:8080/openkm/rest/search?keyword=test&property='okp:consulting.name=alfa'Ejemplos de seguridad
Sección titulada «Ejemplos de seguridad»Mostrar los usuarios con permisos concedidos:
$ curl -u okmAdmin:admin -H "Accept: application/json" -X GET \ http://localhost:8080/openkm/rest/auth/nodes/fe239ae2-4d25-4d87-88b2-924d03b87faa/permissions/usersMostrar los roles con permisos concedidos:
$ curl -u okmAdmin:admin -H "Accept: application/json" -X GET \ http://localhost:8080/openkm/rest/auth/nodes/fe239ae2-4d25-4d87-88b2-924d03b87faa/permissions/rolesAñadir un permiso:
$ curl -v -u okmAdmin:admin -X POST -H "Content-Type: application/x-www-form-urlencoded" \ -d userId=sochoa -d permissions=15 -d recursive=false \ http://localhost:8080/openkm/rest/auth/nodes/fe239ae2-4d25-4d87-88b2-924d03b87faa/permissions/usRevocar un permiso:
$ curl -v -u okmAdmin:admin -X DELETE -H "Content-Type: application/x-www-form-urlencoded" \ -d permissions=15 -d recursive=false \ http://localhost:8080/openkm/rest/auth/nodes/fe239ae2-4d25-4d87-88b2-924d03b87faa/permissions/users/sochoaEjemplos de metadatos
Sección titulada «Ejemplos de metadatos»La definición del grupo de metadatos utilizada en los ejemplos:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE property-groups PUBLIC "-//OpenKM//DTD Property Groups 3.10//EN" "http://www.openkm.com/dtd/property-groups-3.10.dtd"><property-groups> <property-group label="Consulting" name="okg:consulting"> <input label="Name" type="text" name="okp:consulting.name" > <validator type="req"/> </input> <textarea label="Comment" name="okp:consulting.comment" > <validator type="req"/> </textarea> </property-group></property-groups>Añadir un grupo de metadatos:
$ curl -u okmAdmin:admin -H "Accept: application/json" \ -X POST -H "Content-Type: application/json" -d '{"properties":[{"name":"okp:consulting.comment","value":"new comment"},{"name":"okp:consulting.name","value":"new name"},{"name":"okp:consulting.date","value":"20190917163517"}],"grpName":"okg:consulting"}' \ http://localhost:8080/openkm/rest/propertygroups/nodes/fe239ae2-4d25-4d87-88b2-924d03b87faa/groupsEstablecer los valores de un grupo de metadatos:
$ curl -u okmAdmin:admin -H "Accept: application/json" \ -X PUT -H "Content-Type: application/json" \ -d '[{"name":"okp:consulting.comment","value":"set comment"},{"name":"okp:consulting.name","value":"set name"},{"name":"okp:consulting.date","value":"20190917164717"}]' \ http://localhost:8080/openkm/rest/propertygroups/nodes/fe239ae2-4d25-4d87-88b2-924d03b87faa/groups/okg:consulting/propertiesEjemplos de notas
Sección titulada «Ejemplos de notas»Crear una nota:
$ curl -u okmAdmin:admin -H "Accept: application/json" \ -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'text=Hello, world!' \ http://localhost:8080/openkm/rest/note/nodes/fe239ae2-4d25-4d87-88b2-924d03b87faaEjemplos de conversión
Sección titulada «Ejemplos de conversión»Con la función de conversión de la API de OpenKM puede convertir, por ejemplo, un documento de formato Microsoft Word a PDF, entre otros tipos de conversión disponibles.
Convertir un fichero doc a PDF:
$ curl -u okmAdmin:admin -F content=@sample.doc -o sample.pdf \ http://localhost:8080/openkm/rest/conversion/doc/pdfO desde un formulario HTML:
<html> <body> <form method="POST" enctype="multipart/form-data" action="http://localhost:8080/openkm/services/rest/conversion/doc2pdf"> Select file: <input type="file" name="content" size="45"/><br/> <input type="submit" value="Convert" /> </form> </body></html>Convertir un fichero doc a txt:
$ curl -u okmAdmin:admin -F content=@sample.doc http://localhost:8080/openkm/rest/conversion/doc/txtConvertir un fichero de imagen a txt:
$ curl -u okmAdmin:admin -F content=@sample.tif http://localhost:8080/rest/rest/conversion/img/txtEjemplos del plugin REST
Sección titulada «Ejemplos del plugin REST»Con el plugin REST puede ampliar la API REST predeterminada.
$ curl -u okmAdmin:admin -G \ -H "Accept: application/json" \ --data-urlencode "className=com.openkm.plugin.rest.TestRestPlugin" \ --data-urlencode 'param={"key":"key1","value":"value1"}' \ http://localhost:8080/openkm/rest/plugins