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 鈥嬧媏n 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