API Java del buscador de Euskadi.net? ¡al fin!

Fecha de publicación: 

Ya documentamos en su día como las funciones de buscador de Euskadi.eus se ofrecen en modo API. Entonces se nos demandó que podría ser buena idea hacer una versión para Java de ese API. Bueno, pues ya está.

El acceso a cualquier funcionalidad de la infraestructura de Presencia en Internet de euskadi.net está encapsulado en un API Java que permite por ejemplo:

  • Gestionar la taxonomía de etiquetas de catalogación común de euskadi.net
  • Trabajar con contenidos y sus versiones idiomáticas: crear, borrar, modificar, aprobar, catalogar, etc
  • Trabajar con portales, páginas de porta y sus áreas visuales
  • Publicar contenidos, páginas de portal, etc
  • Indexar en uno o varios motoroes de búsqueda cualquier contenido o página de portal
  • Buscar contenidos o páginas de portal


Los diferentes APIs (contenidos, portal, publicador, buscador, etiquetas de catalogación, etc) abstraen al programador de la lógica de negocio implementada en los núcleos de la infraestructura que en donde realmente reside la “inteligencia” del sistema.

De hecho, los APIs son utilizados por:

  • Las Interfaces de usuario de la infraestructura
  • Aplicaciones Departamentales para crear, publicar e indexar contenidos

De todos los APIs disponibles, el API del Buscador es uno de los más interesantes de cara a la reutilización ya que facilita la localización de contenidos y sus meta-datos para su procesado; este API tiene dos “sabores”:

El API pseudo-REST presenta algunos problemas importantes:

  • Crear una query codificada en la URL es complejo y poco intuitivo; a menudo requiere horas de prueba y error, aunque observar cómo funcionan URLs de búsqueda configuradas en los portales de euskadi.net ayuda enormemente.
  • Tratar el XML de resultados de búsqueda es tedioso y exige trabajo

El API Java por el contrario facilita la creación de queries y el tratamiento de los resultados devueltos por el núcleo.

La diferencia es evidente:

  • Query codificada en la URL:
    • http://www.euskadi.net/r01hSearchResultWar/r01hPresentationXML.jsp?
      r01kTgtPg=1&
      r01kPgCmd=1&
      r01kSrchSrcId=contenidos.inter&
      r01kQry=tC:euskadi;tF:procedimientos_administrativos;tT:ayuda_subvencion;
      m:procedureStatus.EQ.16;
      o:createDate.ASC;
      cA:label1;
      pp:r01NavBarBlockSize.9,r01PageSize.10
  • Y el XML de resultados de búsqueda que hay que tratar (WTF!):
     

Por el contrario, utilizar el API Java simplifica enormemente las cosas:

  • La query se crea:
    [java]R01MSearchQuery qry = R01MSearchQuery.create()
    .typedInAnyOfTheeseClusters(R01MTypoClusterOID.forId(“euskadi”))
    .typedInAnyOfTheeseFamilies(R01MTypoFamilyOID.forId(“procedimientos_administrativos”))
    .typedInAnyOfTheeseTypes(R01MTypoTypeOID.forId(“ayuda_subvencion”))
    .mustMeetTheeseMetaDataConditions(R01MSearchQueryNumberMetaData
    .forMetaData(“procedureStatus”)
    .usingCondition(R01MSearchQueryNumberMetaDataCondition.EQUALS)
    .with(16))
    .mustHaveStructureLabel(“label1”);[/java]
  • y basta con crear una sesión de búsqueda para acceder a todos los datos de la respuesta del servidor: número de resultados, paginacion e items de resultado:
    [java]R01MSearchSession session = R01MSearchSession.forQuery(qry);R01MSearchResultItem[] items = session.getCurrentPageSearchResults()
    StringBuffer dbg = new StringBuffer();
    if (items != null) {
    for (R01MSearchResultItem item : items) {
    dbg.append(“-“).append(item.getContentName())
    .append(“: “).append(item.getDocumentName()).append(“\r\n”);
    }
    }[/java]

Pero ¿por qué NO se ha liberado antes el API java y los reutilizadores se han visto obligados a utilizar el infierno del API pseudo-REST?

Hay varias razones por las que el API NO se ha liberado hasta ahora:

  1. El API actual es viejo, viejísimo (del año 2005, hace 7 años!!) y está construido con java JDK 1.4 que no permitía cosas que ahora son tan “normales” como los genéricos, lo que hace que trabajar con el API sea complicado si no se conoce en profundidad.
  2. El API del buscador está disponible junto con el resto de APIs de la infraestructura de euskadi.net (portales, contenidos, ejes, publicador, etc) que NO son utilizables en Internet ya que su función es crear contenidos / páginas, publicar, etc, labores que únicamente se pueden hacer en el entorno de extranet.
  3. El API del buscador NO estaba orientado a su uso por parte de desarrolladores externos con el objetivo de reutilizar datos de euskadi.net ya que se diseñó y construyó mucho antes de la creación del portal OpenData euskadi.

En estos momentos se está revisando en profundidad el API de la infraestructura de euskadi.net así como los núcleos del sistema; es un trabajo que aún llevará meses y que tiene como algunos de sus objetivos:

  • Hacer más usable el API para desarrolladores externos
  • “Modernizar” la tecnología de base: al menos evolucionar a Java JDK 1.6
  • Integrar en el modelo de contenidos de euskadi.net conceptos relacionados con OpenData que hagan más fácil la reutilización

Dado que teníamos una deuda histórica con los reutilzadores, se ha hecho un pequeño esfuerzo para intentar adaptar parte del nuevo API a los núcleos antiguos y fruto de este esfuerzo se va a liberar el API java del buscador de euskadi.net en OpenData euskadi.

Este API es simplemente un “envoltorio” del API v2 con parte del API v3 y dado que el API v3 está en pleno desarrollo, aún está en fase pre-alfa; sin embargo es totalmente operativo y se garantiza una cierta estabilidad contractual de interfaces: no nos podemos comprometer ahora a mantener totalmente el API tal cual se libera ya que está en plena construcción, sin embargo, los cambios NO serán de importancia y en cualquier caso la versión del API publicada seguirá funcionando.

Ell API se ha probado en algunos casos de uso y funciona sin problemas, sin embargo, si detectais cualquier fallo, hacédnosolo saber. Los enlaces pertinentes son estos:

Esperamos que os guste y por supuesto esperamos cualquier sugerencia o comentario.