Ir aplicación en sistemas de producción. Validadores

Buenas tardes, Habr!

A menudo comienzo la mañana mirando al Habr y finalmente decidí contribuir a este proceso de aprendizaje de cosas interesantes. Si todo va bien, entonces este es mi primer artículo del ciclo de uso del lenguaje GO en sistemas de producción. Quiero contarles algunas de las sutilezas de la creación de aplicaciones y servidores, la conveniencia del lenguaje y la velocidad de desarrollo del mismo. Quizás para los profesionales, este artículo parecerá aburrido y no interesante, pero al leer la literatura no encontré una imagen general de la resolución de problemas de producción. Aunque la mayoría de las tareas se resuelven de la misma manera. En este artículo describiré los principios generales de la construcción de un servidor y, como ejemplo, usaré el servidor para validar y ver los códigos postales de Russian Post. Este artículo cubrirá problemas y sutilezas metodológicas más generales que encontré al crear este sistema. No describiré la configuración general, hay muchos de estos en la red, solo quiero centrarme en las pequeñas cosas que impidieron el lanzamiento del proyecto.



En lugar de unirse


Leyendo a Habr, a menudo me enfrentaba a la tarea de validación: verificar la exactitud de la entrada de información del usuario. Cada autor resolvió este problema a su manera. Usé un servicio externo o escribí mi servidor. Propongo otra solución a este problema: la creación de un servicio de directorio. Los directorios son servidores que contienen información de una determinada dirección y que se pueden distinguir en un subsistema separado e independiente. Por lo general, los directorios se utilizan para ayudar al usuario a completar y validar la información ingresada. Como ejemplo de dichos directorios, se pueden citar los servicios de regiones solicitantes, solicitudes de ciudades, KLADR, códigos postales y directorios de GAIS (sistemas de información automatizados estatales). Casi todos los sistemas existentes intercambian datos REST utilizando json o soap. Intentaré contar una plantilla para el desarrollo de dichos directorios, que creará rápidamente dichos sistemas. Y poner en github las fuentes de mi proyecto interno.

La elección de los sistemas. La pregunta surge de inmediato por qué ir? ¿Por qué Linux? ¿Y qué Linux?


Y entonces comencemos en orden. Nuestro sistema actual se basa en productos de 1C, a saber, el BUS y el portal corporativo. Para unificar el sistema operativo, elegimos entre la instalación recomendada de 1C, a saber, Linux OS CentOS. Las secuencias de comandos para iniciar el entorno web 1C se ejecutan en este sistema operativo. El sistema operativo Windows no fue considerado. No puedo decir que me gusta la elección, elegiría Debian, pero sucedió. Necesitábamos la unificación, porque históricamente tenemos un gran sistema operativo de zoológico, varias compilaciones de SO Linux, OS FreeBSD, OS VxWorks. Y, en mi opinión, el sistema operativo Linux CRUX más rápido.

Como muchos proyectos, el sistema creado en 1C se ha convertido en un gran portal y se hizo necesario aislar el sistema y / o complementar el sistema con varios servicios: libros de referencia. Analizando las ofertas y capacidades de los servicios ya creados, así como nuestras necesidades para estos directorios, llegamos a la conclusión de que el directorio:

  • Servicio de servidor autónomo;
  • El intercambio de datos ocurre en REST;
  • Tiene la capacidad de escalar horizontalmente;
  • Debe proporcionar rápidamente datos, aunque sean redundantes, procesados ​​en productos 1C;
  • Reconstruya rápidamente la lógica basada en nuevos desafíos comerciales;

De acuerdo con los criterios anteriores y su facilidad de entrada, Go fue elegido para escribir libros de referencia. Opcional:

  • Vaya a lenguaje con un compilador y le permite incluir fragmentos de código en C;
  • El programa es un archivo único con todas las bibliotecas (no hay problema con la compatibilidad de las bibliotecas después del ensamblaje);
  • comunidad grande (muchos ejemplos y soluciones llave en mano);

Es decir, Go es muy adecuado para crear directorios. Por mi parte, agregaré que php y Go son un poco similares, lo que le permite admitir sistemas escritos en estos idiomas. Go también tiene una gran cantidad de soluciones que le permiten ensamblar rápidamente estas soluciones para sus tareas, es decir, cómo ensamblar un modelo de la casa a partir de los cubos en el diseñador. Y entonces pasemos a practicar.

Ir Instalar y buscar bibliotecas o soluciones


Para instalar, debe descargar el archivo de la página de descarga y descomprimirlo en la carpeta de instalación, usaré / usr / local .

wget https://dl.google.com/go/go1.12.1.linux-amd64.tar.gz tar -C /usr/local -xvzf go1.12.1.linux-amd64.tar.gz 

Quiero prestar atención, Go se divide en dos categorías, la primera, el lenguaje de compilación en sí y las bibliotecas incluidas en el ensamblaje ( GOROOT ), la segunda, estas son bibliotecas adicionales que instaló y donde creará su proyecto ( GOPATH ). Configurando el entorno y preparando la carpeta de desarrollo, usaré / home / gouser / . Agregue / etc / profile o a su perfil personalizado.

 export GOPATH=/home/gouser export GOROOT= /user/local/go/ export PATH=$PATH:/usr/local/go/bin 

Preparando una carpeta para su proyecto:

 mkdir -p /home/gouser/{bin,pkg,src} 

Entonces todo es simple para nuestro proyecto, cree una carpeta en src, cree archivos con la extensión go y compile el proyecto:

 go build 

Recomendaciones para crear un proyecto. Recomendaciones generales


  • Para un proyecto github, es más fácil crear una carpeta para el proyecto src / github.com / <nombre del proyecto>;
  • diseñando el proyecto como un paquete, comentando cada procedimiento es la manera de obtener de manera muy conveniente la documentación del programa preparada en godoc;
  • Saque las variables globales en un módulo separado y conéctelo si es necesario (se asemeja a una plantilla sola);

Tanto los ejemplos precompilados como las bibliotecas se pueden encontrar en libs.garden . Instalación de ejemplos encontrados

 go get <  > ,  github.com/labstack/echo 

Código postal Enlace al proyecto


Después de instalar Go, pasemos a un ejemplo. Puede descargarlo e instalarlo para compilarlo usando los comandos:

 go get github.com/julienschmidt/httprouter go get github.com/LindsayBradford/go-dbf/godbf go get github.com/go-sql-driver/mysql go get github.com/julienschmidt/httprouter cd /home/gouser/go/src/github.com/ git clone https://github.com/Theo730/postcode.git postcode 

Declaración del problema.


Es necesario crear un directorio para trabajar con códigos postales por correo ruso, que resolverá los siguientes problemas:

  • Validación de códigos postales;
  • La capacidad de obtener una lista de todos los objetos contables (regiones, ciudades, etc.);
  • Obtención de todos los índices en el objeto contable de ciudades, regiones, regiones ...
  • De lo anterior, para intercambiar datos a través de REST en forma de json.

Tarea de investigación


Primero debe inicializar la base de datos y luego crear un servidor de solicitudes para esta base de datos. Necesita una base de datos de código postal. La búsqueda es vinfo.russianpost.ru/database/ops.html . Base en FoxPro y en archivo zip. Los siguientes objetos contables se encuentran en la base de datos:

  • región
  • obla autónoma;
  • distrito
  • asentamiento
  • código postal

Para la inicialización en libs.garden , encontramos componentes y ejemplos de trabajo con la base de datos y zip. Tomamos httprouter como un enrutador de solicitud. Nos conectamos al proyecto.
Al examinar el archivo de la base de datos, se encontró que no todos los objetos contables están especificados , es decir, los valores cero están presentes en la muestra.

Solución e implementación


Configuré objetos de contabilidad en una jerarquía cuando se inicializa la base de datos, si el objeto de contabilidad es cero, entonces el nombre se toma del padre. Ideología del servidor: las solicitudes llegan a main (aquí el enrutador de solicitudes) y se redirigen a los controladores (aquí todas las comprobaciones de datos, conversión, etc.). Desde los manejadores, todas las solicitudes a la base de datos y los cálculos se llevan a cabo y los manejadores realizan el retiro de la información recibida. Tal descomposición le permite separar las consultas en la base de datos, los cálculos, la verificación de la información ingresada y la salida encontrada. En principio, todo.

En lugar de un total


La referencia funcional resultó ser más complicada que KLADR . No solo le permite crear un validador o directorio en el sitio, sino también crear un algoritmo para negocios regionales.

Si hay un negocio regional distribuido que vende servicios o bienes. Los distribuidores en las regiones están registrados en el portal, indican el área donde prestarán el servicio o venderán los productos y se les asignará una variedad de códigos postales. Cuando solicita un servicio o producto, el cliente indica el código postal y su aplicación se envía a su distribuidor regional (aquí puede crear un algoritmo complejo). Una lista de solicitudes REST está en github en la documentación del proyecto.

Y un poco de bitrix


Esta referencia se puede conectar a cualquier proyecto o marco, pero como tenemos bitrix, puse un módulo para agregar un validador a los formularios web de componentes estándar.

La instalación del servidor PS se divide especialmente en 3 etapas. Esto se hace debido a la obsolescencia de la base de datos del sitio vinfo.russianpost.ru y debido a restricciones de licencia. La base de datos en sí no es de mi propiedad. Al usarla, usted acepta la política de licencia sobre el sitio anunciado.

Los servidores PSS creados en mis proyectos para el segmento corporativo y bajo estas condiciones no deberían conectarse. El código se puede modificar para sus tareas específicas. No utilizamos acceso externo para nuestros proyectos. Los siguientes proyectos que me gustaría describir son un CLADR completo y un analizador de protocolo de radio de flujo. El siguiente en la línea es Bitrix24 + asterisco. Por favor comente sobre quién es más interesante.

Source: https://habr.com/ru/post/445044/


All Articles