Cómo comunicarse con la API del servicio de Closure Compiler

El servicio de compilador para cierres está obsoleto y se quitará. En su lugar, considera ejecutar el compilador de forma local.

Descripción general

La API del servicio de Closure Compiler proporciona acceso programático a la compilación de JavaScript de Closure Compiler a través de una API basada en la Web. Si bien la IU del compilador de Closure te brinda una manera sencilla de usar el servicio del compilador a través de un formulario simple en una página web, copiar los resultados de esta no es la manera más eficiente de trabajar. Con la API del servicio de Closure Compiler, obtienes la versatilidad de compilar tus propias herramientas y crear tu propio flujo de trabajo.

En este instructivo, se explica el proceso de enviar JavaScript al servicio de Closure Compiler y obtener el resultado del compilador de Closure. En el ejemplo, se usa el nivel más básico de compilación de Closure Compiler, que simplemente quita los comentarios y los espacios en blanco de JavaScript.

En este instructivo, se supone que tienes conocimientos básicos de JavaScript y HTTP. Si bien usa una secuencia de comandos de Python para enviar JavaScript al servicio de Closure Compiler, no necesitas saber Python para seguir el ejemplo.

Cómo comunicarse con la API

  1. Determina los parámetros de la solicitud

    Interactúas con el servicio de Closure Compiler cuando realizas solicitudes HTTP POST al servidor de Closure Compiler. Con cada solicitud, debes enviar al menos los siguientes parámetros:

    js_code o code_url

    El valor de este parámetro indica el código JavaScript que deseas compilar. Debes incluir al menos uno de estos parámetros y puedes incluirlos. El parámetro js_code debe ser una string que contenga JavaScript, como alert('hello'). El parámetro code_url debe contener la URL de un archivo .js de JavaScript que esté disponible mediante HTTP.

    También puedes incluir parámetros de origen con nombre en el formato js_code:path/to/filename.js. Cada archivo se creará en un sistema de archivos virtual, lo que habilitará módulos estandarizados mediante las declaraciones import y export compatibles con ECMASCRIPT6.

    compilation_level

    El valor de este parámetro indica el grado de compresión y optimización que se aplicará a tu JavaScript. Hay tres niveles de compilación posibles: WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS y ADVANCED_OPTIMIZATIONS. En este ejemplo, se usa la compilación WHITESPACE_ONLY, que solo quita los comentarios y los espacios en blanco.

    El valor predeterminado del parámetro compilation_level es SIMPLE_OPTIMIZATIONS.

    output_info

    El valor de este parámetro indica el tipo de información que deseas del compilador. Hay cuatro tipos de resultados posibles: compiled_code, warnings, errors y statistics. En este ejemplo, se usa el valor compiled_code, que le indica al servicio de Closure Compiler que muestre la versión comprimida de JavaScript que recibe en la solicitud.

    output_format

    El formato para el resultado del servicio de Closure Compiler. Existen tres formatos de salida posibles: text, json o xml. En este ejemplo, se usa el valor text, que genera texto sin procesar.

    El valor predeterminado del parámetro output_format es text.

    Para obtener más información sobre estos parámetros obligatorios y los parámetros opcionales adicionales, consulta la referencia de la API.

    En el ejemplo de este instructivo introductorio, solo se envía una línea de JavaScript sin procesar al servicio de Closure Compiler, por lo que se usa js_code en lugar de code_url. Usa un compilation_level de WHITESPACE_ONLY, pide una salida de texto sin procesar con un output_format de text y pide un tipo output_info de compiled_code.

  2. Envía una solicitud posterior al servicio de Closure Compiler

    Para obtener un resultado del servicio de Closure Compiler, envía los parámetros que elegiste en el paso 1 de una solicitud POST a la URL de la API del servicio de Closure Compiler. Una forma de hacerlo es con un formulario HTML simple, como el de Hello World of the Closure Compiler Service API.

    Sin embargo, para usar un formulario como este durante el desarrollo, debes copiar el resultado del navegador y pegarlo en un archivo .js. Si, en cambio, escribes un pequeño programa para enviar la solicitud al servicio de Closure Compiler, puedes escribir la salida del compilador de Closure directamente en un archivo. Por ejemplo, la siguiente secuencia de comandos de Python envía la solicitud al servicio de Closure Compiler y escribe la respuesta:

    #!/usr/bin/python2.4
    
    import httplib, urllib, sys
    
    # Define the parameters for the POST request and encode them in
    # a URL-safe format.
    
    params = urllib.urlencode([
        ('js_code', sys.argv[1]),
        ('compilation_level', 'WHITESPACE_ONLY'),
        ('output_format', 'text'),
        ('output_info', 'compiled_code'),
      ])
    
    # Always use the following value for the Content-type header.
    headers = { "Content-type": "application/x-www-form-urlencoded" }
    conn = httplib.HTTPSConnection('closure-compiler.appspot.com')
    conn.request('POST', '/compile', params, headers)
    response = conn.getresponse()
    data = response.read()
    print data
    conn.close()
    

    Nota: Para reproducir este ejemplo, es posible que los usuarios de Windows deban instalar Python. Consulta las Preguntas frecuentes de Windows Python para obtener instrucciones sobre cómo instalar y usar Python en Windows.

    Esta secuencia de comandos optimiza el código JavaScript que se le pasa como argumento de la línea de comandos. Pega el código anterior en un archivo llamado compile.py, cambia los permisos del archivo para que sea ejecutable y ejecuta el siguiente comando:

    $ python compile.py 'alert("hello");// This comment should be stripped'
    

    Este comando imprime el código comprimido de la respuesta de Closure Compiler:

    alert("hello");
    

    Debido a que en este ejemplo se usa compilación básica, el compilador no hace más que quitar el comentario.

    A continuación, presentamos algunos aspectos que debe tener en cuenta sobre esta secuencia de comandos:

    • Los parámetros se pasan al método de solicitud de HTTPSConnection como una string codificada en URL. Después de la llamada a urllib.urlencode, la variable de parámetros contiene la siguiente string:
      js_code=alert%28%22hello%22%29%3B%2F%2F+This+comment+should+be+stripped&output_info=compiled_code&out=text&compilation_level=WHITESPACE_ONLY
          
      Si escribes tu propia secuencia de comandos, la secuencia de comandos debe publicar contenido codificado en formato URL como este.
    • La solicitud siempre debe tener un encabezado Content-type de application/x-www-form-urlencoded
  3. Próximos pasos

    Si deseas aprender a usar el servicio para lograr una mejor compresión en una situación de desarrollo más realista, continúa con Comprime los archivos con la API.