Membuat API REST dengan Node.js dan Oracle Database

Halo, Habr! Saya mempersembahkan kepada Anda terjemahan artikel “Membuat API REST: Dasar-Dasar Server Web” .

Bagian 1. Membuat API REST: Dasar-Dasar Server Web


Server web adalah salah satu komponen terpenting dari REST API. Dalam posting ini, Anda akan memulai proyek REST API Anda dengan membuat beberapa direktori dan file awal. Kemudian Anda akan membuat modul server web dan memasangnya sehingga server web dimulai dan dimatikan dengan benar.

Kode dalam proyek ini akan diatur menggunakan struktur direktori umum, yang dapat disesuaikan dan dibangun dari waktu ke waktu sesuai kebutuhan.

cd ~ mkdir hr_app cd hr_app/ touch index.js mkdir config touch config/web-server.js mkdir controllers mkdir db_apis mkdir services touch services/web-server.js 

File index.js dapat dianggap sebagai file "utama" dalam aplikasi. Ini akan menjadi titik masuk ke aplikasi. Kami akan menambahkan kode ke file ini dan file web-server.js di direktori config dan layanan.

Rekatkan kode berikut ke dalam file Home> hr_app> config> web-server.js

 module.exports = { port: process.env.HTTP_PORT || 3000 }; 

Di Node.js, objek proses memiliki properti env yang berisi lingkungan pengguna. Saya menggunakan ini untuk mengatur nilai port ke nilai variabel lingkungan HTTP_PORT. Jika variabel lingkungan ini tidak ditentukan, nilai default adalah 3000.

Rekatkan kode berikut ke dalam Beranda> hr_app> layanan> file web-server.js

 const http = require('http'); const express = require('express'); const webServerConfig = require('../config/web-server.js'); let httpServer; function initialize() { return new Promise((resolve, reject) => { const app = express(); httpServer = http.createServer(app); app.get('/', (req, res) => { res.end('Hello World!'); }); httpServer.listen(webServerConfig.port) .on('listening', () => { console.log(`Web server listening on localhost:${webServerConfig.port}`); resolve(); }) .on('error', err => { reject(err); }); }); } module.exports.initialize = initialize; 

Baris 1-3: Diperlukan beberapa modul. Modul http termasuk dalam Node.js, tetapi modul Express perlu diinstal melalui npm.

Baris 7-27: Sebuah fungsi bernama inisialisasi dinyatakan. Fungsi segera mengembalikan janji, yang diizinkan atau ditolak tergantung pada apakah server web berhasil diluncurkan.

Baris 9-10: Aplikasi ekspres baru dibuat (yang sebenarnya hanya fungsi) dan kemudian digunakan untuk membuat server http melalui modul http.

Baris 12-14: Metode get aplikasi digunakan untuk menambahkan handler untuk permintaan GET yang tiba di jalur root (/). Fungsi panggilan balik akan dipanggil setelah menerima permintaan seperti itu, dan itu akan menggunakan parameter "res" (res) untuk mengirim respons "Hello World!" Kepada pelanggan.

Baris 16-24: Metode mendengarkan server digunakan untuk mengikat port yang ditentukan dan mulai mendengarkan permintaan yang masuk.

Baris 28: mengekspor modul sehingga dapat digunakan secara eksternal

Rekatkan kode berikut ke dalam file Beranda> hr_app> index.js

 const webServer = require('./services/web-server.js'); async function startup() { console.log('Starting application'); try { console.log('Initializing web server module'); await webServer.initialize(); } catch (err) { console.error(err); process.exit(1); // Non-zero failure code } } startup(); 

Kami menghubungkan modul server web, dan kemudian menentukan dan memanggil fungsi startup asinkron. Karena fungsi inisialisasi server web mengembalikan janji, Anda dapat menggunakannya dengan async / menunggu dan membungkusnya dalam blok coba-tangkap. Jika fungsi inisialisasi berhasil, server web akan berfungsi; jika tidak, pengecualian apa pun akan ditangkap dan diproses. Yang harus Anda lakukan sekarang adalah menginisialisasi npm dan menginstal Express - maka Anda dapat memulai aplikasi. Jalankan perintah berikut di terminal dari direktori hr_app.

 npm init -y npm install express -s node . 

Perintah npm init digunakan untuk membuat file package.json, yang digunakan npm sebagai file manifes (flag -y menerima opsi default). Perintah install npm digunakan untuk menginstal express (flag -s menambahkan express ke daftar dependensi di package.json). Npm menyimpan modul yang Anda instal di direktori node_modules. Dia juga membuat file bernama package.lock.json untuk menyediakan pohon yang identik untuk tim pengembangan.

Apakah Anda melihat pesan server Web mendengarkan di localhost: 3000? Selamat, Anda telah membuat server ekspres berdasarkan!

Dan ini dia, "Hello World" yang lain. Meskipun tidak terlalu menyenangkan, ini adalah langkah pertama yang penting untuk API Anda.

Ketika Anda siap, Anda dapat mematikan server dengan kembali ke terminal dan menekan ctrl + c.

gambar

Pematian terkendali


Selama shutdown dengan menekan Ctrl + C, Anda tidak memiliki kendali atas bagaimana ini terjadi. Untuk mengontrol proses shutdown, Anda perlu menutup server web secara eksplisit dan keluar dari proses Node.js.

Rekatkan kode berikut ke dalam Beranda> hr_app> layanan> file web-server.js

 // *** previous code above this line *** function close() { return new Promise((resolve, reject) => { httpServer.close((err) => { if (err) { reject(err); return; } resolve(); }); }); } module.exports.close = close; 

Fungsi tutup mengembalikan janji yang diselesaikan ketika server web berhasil ditutup. Metode httpServer.close menghentikan pembuatan koneksi baru, tetapi tidak memaksa untuk menutup koneksi yang sudah terbuka. Tergantung pada berapa banyak koneksi yang terbuka dan apa yang mereka lakukan, Anda mungkin perlu menunggu sedikit sampai panggilan balik berfungsi. Meskipun Anda tidak akan melakukan ini dalam modul ini, Anda dapat menggunakan kode khusus atau modul npm seperti http-shutdown untuk memaksa koneksi terbuka ditutup.

Rekatkan kode berikut ke dalam file Beranda> hr_app> index.js

 // *** previous code above this line *** async function shutdown(e) { let err = e; console.log('Shutting down'); try { console.log('Closing web server module'); await webServer.close(); } catch (e) { console.log('Encountered error', e); err = err || e; } console.log('Exiting process'); if (err) { process.exit(1); // Non-zero failure code } else { process.exit(0); } } process.on('SIGTERM', () => { console.log('Received SIGTERM'); shutdown(); }); process.on('SIGINT', () => { console.log('Received SIGINT'); shutdown(); }); process.on('uncaughtException', err => { console.log('Uncaught exception'); console.error(err); shutdown(err); }); 

Acara SIGINT dan SIGTERM berhubungan dengan sinyal yang dapat dikirim ke proses untuk mematikannya, misalnya, ketika ctrl + c ditekan. Peristiwa uncaughtException akan terjadi ketika kesalahan JavaScript dilemparkan, tetapi tidak ditangkap, dan ditangani menggunakan pernyataan coba-tangkap. Coba mulai dan tutup aplikasi lagi. Anda akan mengetahui bahwa semuanya berfungsi dengan benar ketika Anda melihat pesan "shutdown" di terminal.

Registrasi di server


Ada satu hal lagi yang melengkapi modul server web kami: HTTP logging. Ada berbagai modul yang dapat Anda gunakan untuk jenis login ini, tetapi morgan adalah salah satu yang sederhana. Mari kita instal morgan menggunakan npm.

 npm install morgan -s 

Kemudian tambahkan baris berikut ke layanan / web-server.js di bawah baris yang membutuhkan express (baris 2):

 const morgan = require('morgan'); 

Sekarang Anda dapat mengaktifkan fungsi morgan sebagai middleware di mana semua permintaan akan diproses menggunakan app.use. Tambahkan baris ini sebelum memanggil app.get, yang menampilkan pesan "hello world".

 // Combines logging info from request and response app.use(morgan('combined')); // *** app.get call below this line *** 

Perhatikan bahwa app.use membuat saluran fungsi middleware yang dapat berinteraksi dengan permintaan dan respons HTTP. Fungsi middleware akan dieksekusi sesuai urutan diaktifkannya. Mulai ulang aplikasi dan instal terminal sehingga Anda dapat melihatnya dan browser pada saat yang sama. Setiap kali Anda memuat ulang halaman, Anda akan melihat entri log baru muncul di terminal. Secara default, morgan meneruskan informasi log ke STDOUT (yang ditampilkan di terminal).

Artikel berikut akan membahas dasar-dasar bekerja dengan database, termasuk kumpulan koneksi, yang akan membantu Anda memahami dan membangun REST API untuk Node.js.

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


All Articles