Masuk aplikasi dalam sistem produksi. Validator

Selamat siang, Habr!

Saya sering memulai pagi dengan melihat Habr dan akhirnya memutuskan untuk berkontribusi dalam proses belajar hal-hal menarik ini. Jika semuanya berjalan dengan baik, maka ini adalah artikel pertama saya dari siklus menggunakan bahasa GO pada sistem produksi. Saya ingin memberi tahu Anda beberapa seluk-beluk membuat aplikasi dan server, kenyamanan bahasa dan kecepatan pengembangannya. Mungkin bagi para profesional, artikel ini akan terasa membosankan dan tidak menarik, tetapi membaca literatur saya tidak menemukan gambaran umum untuk memecahkan masalah produksi. Meskipun sebagian besar tugas diselesaikan dengan cara yang sama. Pada artikel ini saya akan menjelaskan prinsip-prinsip umum membangun server, dan sebagai contoh, saya akan menggunakan server untuk memvalidasi dan melihat kode pos dari Pos Rusia. Artikel ini akan membahas masalah metodologis dan masalah yang lebih umum yang saya temui saat membuat sistem ini. Saya tidak akan menjelaskan pengaturan umum, ada banyak di jaringan, saya hanya ingin fokus pada hal-hal kecil yang mencegah peluncuran proyek.



Alih-alih bergabung


Membaca Habr, saya cukup sering menghadapi tugas validasi - memeriksa kebenaran input informasi pengguna. Setiap penulis memecahkan masalah ini dengan caranya sendiri. Saya menggunakan layanan eksternal atau menulis server saya. Saya mengusulkan solusi lain untuk masalah ini - pembuatan layanan direktori. Direktori adalah server yang berisi informasi dari arah tertentu dan yang dapat dibedakan menjadi subsistem yang terpisah dan independen. Biasanya, direktori digunakan untuk membantu pengguna mengisi dan memvalidasi informasi yang dimasukkan. Contoh direktori tersebut adalah layanan permintaan regional, permintaan kota, KLADR, kode pos, direktori GAIS (sistem informasi otomatis negara). Hampir semua sistem yang ada bertukar data REST menggunakan json atau sabun. Saya akan mencoba memberi tahu templat untuk pengembangan direktori seperti itu, yang akan dengan cepat membuat sistem seperti itu. Dan pakai github sumber proyek internal saya.

Pilihan sistem. Pertanyaan segera muncul mengapa GO? Mengapa Linux? Dan Linux yang mana?


Jadi mari kita mulai secara berurutan. Sistem kami saat ini dibangun di atas produk-produk dari 1C, yaitu BUS dan portal perusahaan. Untuk menyatukan OS, kami memilih dari instalasi 1C yang disarankan - yaitu, Linux OS CentOS. Skrip untuk meluncurkan lingkungan web 1C dijalankan di OS ini. OS Windows tidak dipertimbangkan. Saya tidak bisa mengatakan bahwa saya suka pilihannya, saya akan memilih debian, tetapi itu terjadi. Kami membutuhkan penyatuan, karena secara historis kami memiliki OS kebun binatang yang besar, berbagai versi OS Linux, OS FreeBSD, OS VxWorks. Dan, menurut saya, OS Linux CRUX tercepat.

Seperti banyak proyek, sistem yang dibuat pada 1C telah tumbuh menjadi portal besar dan menjadi perlu untuk mengisolasi sistem dan / atau melengkapi sistem dengan berbagai layanan - buku referensi. Menganalisis penawaran dan kemampuan layanan yang telah dibuat, serta kebutuhan kami untuk direktori ini, kami sampai pada kesimpulan bahwa direktori:

  • Layanan server otonom;
  • Pertukaran data terjadi pada REST;
  • Memiliki kemampuan skala secara horizontal;
  • Harus dengan cepat memberikan data, meskipun berlebihan, memproses pada produk 1C;
  • Cepat membangun kembali logika berdasarkan tantangan bisnis baru;

Menurut kriteria di atas dan kemudahannya untuk masuk, Go dipilih untuk menulis buku referensi. Opsional:

  • Pergi bahasa dengan kompiler dan memungkinkan Anda untuk memasukkan potongan kode di C;
  • Program ini adalah file tunggal dengan semua perpustakaan (tidak ada masalah dengan kompatibilitas perpustakaan setelah perakitan);
  • komunitas besar (banyak contoh dan solusi turnkey);

Artinya, Go sangat cocok untuk membuat direktori. Dari saya sendiri, saya akan menambahkan bahwa php dan Go agak mirip, yang memungkinkan Anda untuk mendukung sistem yang ditulis dalam bahasa-bahasa ini. Go juga sudah memiliki sejumlah besar solusi yang memungkinkan Anda untuk dengan cepat mengumpulkan solusi ini untuk tugas-tugas Anda, yaitu, cara merakit model rumah dari kubus dalam perancang. Jadi mari kita lanjutkan berlatih.

GO Instal dan cari perpustakaan atau solusi


Untuk menginstal, Anda perlu mengunduh arsip dari halaman unduhan dan unzip ke folder instalasi, saya akan menggunakan / 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 

Saya ingin memperhatikan, Go dibagi menjadi dua kategori, yang pertama adalah bahasa kompilasi itu sendiri dan perpustakaan yang termasuk dalam perakitan ( GOROOT ), yang kedua adalah perpustakaan tambahan yang Anda instal dan di mana Anda akan membuat proyek Anda ( GOPATH ). Menyiapkan lingkungan dan menyiapkan folder pengembangan, saya akan menggunakan / home / gouser / . Tambahkan / etc / profile atau ke .profile kustom Anda.

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

Mempersiapkan folder untuk proyek Anda:

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

Maka semuanya sederhana untuk proyek kami, buat folder di src, buat file dengan ekstensi go dan kompilasi proyek:

 go build 

Rekomendasi untuk membuat proyek. Rekomendasi umum


  • Untuk proyek github, lebih mudah membuat folder untuk proyek src / github.com / <nama proyek>;
  • merancang proyek sebagai sebuah paket, mengomentari setiap prosedur adalah cara untuk mendapatkan dokumentasi program yang sudah jadi di godoc;
  • Keluarkan variabel global dalam modul terpisah dan hubungkan jika perlu (menyerupai templat saja);

Contoh dan pustaka yang dibuat sebelumnya dapat ditemukan di libs.garden . Pemasangan contoh yang ditemukan

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

Kode pos Tautan ke proyek


Setelah menginstal Go, mari beralih ke contoh. Anda dapat mengunduh dan menginstalnya untuk kompilasi menggunakan perintah:

 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 

Pernyataan masalah


Penting untuk membuat direktori untuk bekerja dengan kode pos melalui pos Rusia, yang akan memecahkan masalah berikut:

  • Validasi kode pos;
  • Kemampuan untuk mendapatkan daftar semua objek akuntansi (wilayah, kota, dll.);
  • Memperoleh semua indeks dalam objek akuntansi untuk kota, kabupaten, wilayah ...
  • Dari penjelasan di atas, untuk bertukar data melalui REST dalam bentuk json.

Penelitian tugas


Pertama, Anda perlu menginisialisasi database, dan kemudian membuat server permintaan ke database ini. Perlu database kode pos. Cari adalah vinfo.russianpost.ru/database/ops.html . Berbasis di FoxPro dan arsip zip. Objek akuntansi berikut ini terletak di database:

  • wilayah
  • obla otonom;
  • distrik;
  • penyelesaian;
  • kode pos

Untuk inisialisasi di libs.garden kami menemukan komponen dan contoh bekerja dengan database dan zip. Kami mengambil httprouter sebagai router permintaan. Kami terhubung ke proyek.
Ketika memeriksa file database, ditemukan bahwa tidak semua objek akuntansi ditentukan , yaitu, nilai nol hadir dalam sampel.

Solusi dan implementasi


Saya mengatur objek akuntansi dalam hierarki ketika database diinisialisasi, jika objek akuntansi adalah nol, maka nama tersebut diambil dari induknya. Ideologi server - permintaan menjadi utama (di sini router permintaan) dan dialihkan ke penangan (di sini semua pemeriksaan data, konversi, dll.). Dari penangan semua permintaan ke database dan perhitungan dilakukan dan penangan melakukan penarikan informasi yang diterima. Dekomposisi semacam itu memungkinkan Anda untuk memisahkan kueri dalam basis data, perhitungan, verifikasi informasi yang dimasukkan, dan keluaran yang ditemukan. Pada prinsipnya, semuanya.

Alih-alih total


Referensi fungsional ternyata lebih rumit daripada CLADR . Ini tidak hanya memungkinkan Anda untuk membuat validator atau direktori di situs, tetapi juga untuk membuat algoritma untuk bisnis regional.

Jika ada bisnis regional yang menjual jasa atau barang. Dealer di wilayah terdaftar di portal, menunjukkan daerah di mana mereka akan menyediakan layanan atau menjual barang dan mereka diberi berbagai kode pos. Saat meminta layanan atau produk, klien menunjukkan kode pos, dan aplikasinya dikirim ke dealer regionalnya (di sini Anda dapat membangun algoritma yang kompleks). Daftar permintaan REST ada di github dalam dokumentasi proyek.

Dan sedikit bitrix


Referensi ini dapat dihubungkan ke proyek atau kerangka kerja apa pun, tetapi karena kita memiliki bitrix, saya meletakkan modul untuk menambahkan validator ke formulir web komponen standar.

Instalasi PS Server secara khusus dibagi menjadi 3 tahap. Ini dilakukan karena usangnya basis data dari situs vinfo.russianpost.ru dan karena batasan lisensi. Basis data itu sendiri bukan milik saya. Dengan menggunakannya, Anda menerima kebijakan lisensi di atas situs yang diumumkan.

Server PSS dibuat dalam proyek saya untuk segmen korporat dan dalam kondisi tidak boleh online. Kode dapat dimodifikasi untuk tugas spesifik Anda. Kami tidak menggunakan akses eksternal untuk proyek kami. Proyek-proyek berikut yang ingin saya uraikan adalah CLADR lengkap dan penganalisa protokol radio stream. Baris berikutnya adalah Bitrix24 + asterisk. Berikan komentar tentang siapa yang lebih menarik.

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


All Articles