Introducción
Esto continúa mi serie "Getting Comfortable with Couchbase Mobile" (post #5). Esta vez exploraremos Pasarela de sincronización desde la línea de comandos. Esto puede ser realmente útil, tanto para la comprensión como para las pruebas y la depuración. (Al final se incluyen enlaces a otros posts de la serie).
Fondo
Para sentirse cómodo con el conjunto Couchbase Móvil pila, es genial para instalar y ejecutar todo en una sola máquina. En esta serie de entradas, voy a caminar a través de los pasos para empezar con cada componente. Voy a mostrar cómo hacer un poco de exploración extra en el camino, también.
Sólo haré una configuración mínima. Esto no pretende explicar lo que necesitas para un entorno de producción. Asumo que estás familiarizado con algunos conceptos básicos de NoSQL, tienes alguna comprensión de Couchbase, y sabes cómo construir aplicaciones en algo como Java, Android o iOS. Si quieres leer más sobre bases de datos NoSQL o Couchbase, puedes encontrar un montón de recursos en la web Couchbase sitio.
Couchbase es de código abierto. Todo lo que usaré aquí es gratis para probar. Mira al final del post para más recursos si necesitas ayuda.
Pasarela de sincronización
Sync Gateway es una aplicación web segura con APIs de sincronización, REST, stream, batch y eventos para acceder y sincronizar datos a través de la web. Sync Gateway permite, entre otras cosas, la replicación segura de datos entre Couchbase Server y Couchbase Lite.
Sync Gateway tiene pocas dependencias y puede ejecutarse en la mayoría de las distribuciones de Linux (incluso en Raspberry Pi), Windows y OSX/macOS. Los pasos específicos para la instalación varían según la plataforma. Consulte el descargas para consultar todos los paquetes disponibles. Para instalar en distribuciones de Linux distintas de las admitidas, consulte esta entrada.
Configuración y funcionamiento
Una vez instalado Sync Gateway, abra un intérprete de comandos.
A continuación, tengo dos configuraciones en la lista. Usted puede encontrar estos en el ejemplos
de su instalación, o copie y pegue el texto de aquí en el suyo propio.
El primero lo puedes utilizar si tienes Servidor Couchbase que se ejecuta en su máquina. Esta es la configuración que encontrará en examples/basic-couchbase-bucket.json
.
1 2 3 4 5 6 7 8 9 10 |
{ "log": ["*"], "bases de datos": { "db": { "servidor": "http://localhost:8091", "cubo": "por defecto", "usuarios": { "INVITADO": { "desactivado": falso, "admin_canales": ["*"] } } } } } |
O para utilizar Sync Gateway de forma autónoma (normalmente sólo para pruebas), utilice esta configuración (que se encuentra en examples/basic-walrus-bucket.json
):
1 2 3 4 5 6 7 8 9 10 |
{ "log": ["*"], "bases de datos": { "db": { "servidor": "morsa:", "usuarios": { "INVITADO": { "desactivado": falso, "admin_canales": ["*"] } }, "allow_empty_password": verdadero } } } |
Crear un documento
Desde la línea de comandos, ejecute Sync Gateway e indique la ruta al archivo de configuración.
1 |
$ /ruta/a/sync_gateway tu_configuración.json |
En este punto el usuario especial INVITADO está habilitado. Podemos seguir adelante y crear un documento.
1 |
$ rizo -s -g -X PUT -H Content-Type: application/json' -d '{ "prueba": "entrada" }' localhost:4984/db/a_doc |
La respuesta muestra que la escritura se ha realizado correctamente. También puede ver esto en la salida del registro de Sync Gateway y mirando el bucket de respaldo en el archivo Consola web del servidor Couchbase.
Esta es la respuesta que vemos en la línea de comandos.
1 |
{"id":"a_doc","ok":verdadero,"rev":"1-93996db139ad4024d0c7c982d4f69122"} |
Actualizar un documento
A continuación, vamos a intentar hacer un cambio en el documento.
1 |
$ rizo -s -g -X PUT -H Content-Type: application/json' -d '{ "test": "changed" }' localhost:4984/db/a_doc |
La salida muestra este fallo.
1 |
{"error":"conflicto","razón":"El documento existe"} |
¿Por qué? Si recuerdas de otras partes de esta serie de blogs, Couchbase Mobile usa algo llamado Control de Concurrencia Multiversión para rastrear revisiones. Eso significa que cuando hacemos cambios en un documento, tenemos que indicar cuál es el documento "padre".
Intentémoslo de nuevo, esta vez especificando la revisión padre.
1 |
$ rizo -s -g -X PUT -H Content-Type: application/json' -d '{ "test": "changed" }' 'localhost:4984/db/a_doc?rev=1-93996db139ad4024d0c7c982d4f69122' |
Eso funciona. La respuesta es
1 |
{"id":"a_doc","ok":verdadero,"rev":"2-8d7051e4510c47c5e0aa74aed1fbd788"} |
Seguimiento de la alimentación de cambios
El feed de cambios te ofrece una excelente forma de realizar un seguimiento de la base de datos. Puedes usar esto para escribir lógica del lado del servidor basada en eventos, o implementar un sistema automatizado de resolución de conflictos.
Mostraremos una versión que mantiene el feed abierto. Es posible que desee abrir otra ventana de línea de comandos para ver la salida.
1 |
$ rizo -X GET localhost:4984/db/_changes?feed=continuous&heartbeat=26000&since=0' |
Aquí hemos fijado el tipo de alimentación en continua. Varios elementos a lo largo de una ruta de red pueden cerrar una conexión que parece inactiva. Sync Gateway puede enviar un heartbeat para evitarlo. Establecemos un tiempo de espera de 26000 milisegundos.
El último parámetro, desde
indica a Sync Gateway dónde queremos empezar en la secuencia general de cambios. Normalmente debe tratarse como un valor opaco. Normalmente, una aplicación se iniciará sin especificar este parámetro (obteniendo todos los cambios) y, a continuación, realizará un seguimiento del valor enviado para utilizarlo en futuras solicitudes.
Este es el aspecto de un conjunto de cambios.
1 2 |
{"seq":1,"id":"_usuario/","cambios":[{"rev":""}]} {"seq":3,"id":"a_doc","cambios":[{"rev":"2-8d7051e4510c47c5e0aa74aed1fbd788"}]} |
Añadir un usuario
Ahora, vamos a añadir un nuevo usuario, jdoe
. Esta es una función de administración, por lo que la solicitud debe pasar por el puerto de administración. (Puerto 4985 si estás usando una de las configuraciones listadas).
1 |
$ rizo -s -g -X PUT -H Content-Type: application/json' -d '{ "contraseña": "pass", "admin_channels": [ "ch9" ] }' localhost:4985/db/Usuario/jdoe |
También desactivaremos el acceso anónimo (GUEST).
1 |
$ rizo -s -g -X PUT -H Content-Type: application/json' -d {"disabled": true }' localhost:4985/db/Usuario/INVITADO |
Ya no podemos acceder a Sync Gateway desde el puerto público (4984) sin proporcionar un nombre de usuario y una contraseña.
Canales
Vamos a añadir un documento con un campo especial, canales
.
1 |
$ rizo -s -g -u jdoe:pass -X PUT -H Content-Type: application/json' -d '{ "mi": "doc", "channels": "abc" }' localhost:4984/db/jd_doc |
Deberías ver esto devuelto.
1 |
{"id":"jd_doc","ok":verdadero,"rev":"1-4407b06b44eccdf1a9ef8cbe6f5dbe7f"} |
Sync Gateway pasa cada documento a través de una función especial, llamada función de sincronización, cada vez que se actualiza un documento. No hemos especificado una función de sincronización, por lo que se utiliza automáticamente la predeterminada.
La función por defecto busca canales
en las propiedades del documento. Si se encuentra, el documento se asigna a ese canal.
Un usuario debe tener acceso a un canal para recibir un documento asignado a ese canal. Más información sobre los canales aquí. Ya veremos el impacto.
Para ver qué pasa cuando no nos autenticamos, prueba este comando. La petición es rechazada
1 |
$ rizo -X GET localhost:4984/db/jd_doc |
con la respuesta esperada.
1 |
{"error":"No autorizado","razón":"Inicio de sesión obligatorio"} |
¿Qué tal si lo intentamos de nuevo, proporcionando el nombre de usuario y la contraseña correctos?
1 |
$ rizo -u jdoe:pass -X GET localhost:4984/db/jd_doc |
Esto a veces pilla a la gente por sorpresa. Nos vuelven a rechazar, pero por un motivo diferente.
1 |
{"error":"Prohibido","razón":"prohibido"} |
¿Qué ha pasado? Recuerda que cuando escribimos el documento, lo asignamos al canal abc
. Aunque el usuario jdoe
escribió el documento, no hemos dado acceso a la abc
canal. Sin eso, jdoe
no puede volver a leer el documento.
Cambiar los canales jdoe
tiene acceso a
1 |
$ rizo -s -g -X PUT -H Content-Type: application/json' -d '{ "admin_channels": [ "abc" ] }' localhost:4985/db/Usuario/jdoe |
y ver que el usuario ya puede acceder al documento.
1 |
$ rizo -u jdoe:pass -X GET localhost:4984/db/jd_doc |
¡Éxito!
1 |
{"_id":"jd_doc","_rev":"1-4407b06b44eccdf1a9ef8cbe6f5dbe7f","canales":"abc","mi":"doc"} |
Conclusión
Espero que esto le ayude a comprender mejor Sync Gateway. Le animo a que eche un vistazo a la API REST más. Puede encontrar más información interesante en la utilidad de administración web integrada en Sync Gateway (http://localhost:4985/_admin/) y en la consola web del servidor Couchbase.
Para ver un ejemplo interesante de cómo usar Sync Gateway de forma autónoma, consulta nuestra charla de CouchBase Connect 2016: https://www.youtube.com/watch?v=6Ra4NeY7TNA
[buttongroup][button style="btn-link btn-lg" icon="fa fa-arrow-left" align="left" iconcolor="#dd3333″ type="link" target="false" title="Anterior: Instalación de Sync Gateway" link="https://www.couchbase.com/blog/comodarse-couchbase-móvil-instalar-sync-gateway/" linkrel=""][button style="btn-link btn-lg" icon="fa fa-arrow-right" align="left" iconcolor="#dd3333″ type="link" target="false" title="Siguiente: TBD" link="" linkrel=""][/buttongroup]
Posdata
Consulte más recursos en nuestra portal para desarrolladores y síganos en Twitter @CouchbaseDev.
Puede enviar preguntas a nuestro foros. Y participamos activamente en Stack Overflow.
Puede seguirme personalmente en @HodGreeley
[...] puede probar. También puede utilizar herramientas de línea de comandos y la interfaz de administración de Sync Gateway. Eche un vistazo aquí para obtener más información sobre [...]
[Anterior: Couchbase Server a través de la línea de comandos Siguiente: Sync Gateway a través de la línea de comandos [...]