Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kodekan API Pertama Anda Dengan Node.js dan Express:Hubungkan Database

Membangun REST API Dengan Node.js dan Express:Menghubungkan Database

Dalam tutorial pertama, Memahami RESTful API, kita mempelajari apa itu arsitektur REST, apa metode dan respons permintaan HTTP, dan bagaimana memahami titik akhir RESTful API. Dalam tutorial kedua, Cara Mengatur Server API Ekspres, kita mempelajari cara membangun server dengan http bawaan Node. modul dan kerangka kerja Express, dan cara mengarahkan aplikasi yang kita buat ke titik akhir URL yang berbeda.

Saat ini, kami menggunakan data statis untuk menampilkan informasi pengguna dalam bentuk umpan JSON ketika titik akhir API dipukul dengan GET meminta. Dalam tutorial ini, kita akan menyiapkan database MySQL untuk menyimpan semua data, menghubungkan ke database dari aplikasi Node.js kita, dan mengizinkan API untuk menggunakan GET , POST , PUT , dan DELETE metode untuk membuat API lengkap.

Pemasangan

Sampai saat ini, kami belum menggunakan database untuk menyimpan atau memanipulasi data apa pun, jadi kami akan menyiapkannya. Tutorial ini akan menggunakan MySQL, dan jika Anda sudah menginstal MySQL di komputer Anda, Anda siap untuk melanjutkan ke langkah berikutnya.

Jika Anda belum menginstal MySQL, Anda dapat mengunduh MAMP untuk macOS dan Windows, yang menyediakan lingkungan dan database server lokal gratis. Setelah Anda mengunduh ini, buka program dan klik Mulai Server untuk memulai MySQL.

Selain menyiapkan MySQL itu sendiri, kami ingin perangkat lunak GUI untuk melihat database dan tabel. Untuk Mac, unduh SequelPro, dan untuk Windows unduh SQLyog. Setelah MySQL diunduh dan dijalankan, Anda dapat menggunakan SequelPro atau SQLyog untuk terhubung ke localhost dengan nama pengguna root dan kata sandi root pada port 3306 .

Setelah semuanya diatur di sini, kita dapat melanjutkan ke pengaturan database untuk API kita.

Menyiapkan Basis Data

Dalam perangkat lunak tampilan database Anda, tambahkan database baru dan beri nama api . Pastikan MySQL berjalan, atau Anda tidak akan dapat terhubung ke localhost .

Ketika Anda memiliki api database dibuat, pindah ke dalamnya dan jalankan kueri berikut untuk membuat tabel baru.

CREATE TABLE `users` (
  `id`       int(11)     unsigned NOT NULL AUTO_INCREMENT,
  `name`     varchar(30) DEFAULT '',
  `email`    varchar(50) DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Kueri SQL ini akan membuat struktur users meja. Setiap pengguna akan memiliki id yang bertambah secara otomatis, nama, dan alamat email.

Kami juga dapat mengisi database dengan data yang sama yang sedang kami tampilkan melalui array JSON statis dengan menjalankan INSERT kueri.

INSERT INTO users (name, email) 
     VALUES ('Richard Hendricks', '[email protected]'), 
            ('Bertram Gilfoyle',  '[email protected]');

Tidak perlu memasukkan id bidang, karena bertambah secara otomatis. Pada titik ini, kami memiliki struktur tabel kami serta beberapa data sampel untuk digunakan.

Menghubungkan ke MySQL

Kembali ke aplikasi kita, kita harus terhubung ke MySQL dari Node.js untuk mulai bekerja dengan data. Sebelumnya, kami menginstal mysql modul npm, dan sekarang kita akan menggunakannya.

Buat direktori baru bernama data dan buat config.js berkas.

Kita akan mulai dengan meminta mysql modul di data/config.js .

const mysql = require('mysql');

Mari kita buat config objek yang berisi host, user, password, dan database. Ini harus merujuk ke api database yang kami buat dan menggunakan pengaturan localhost default.

// Set database connection credentials
const config = {
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'api',
};

Untuk efisiensi, kita akan membuat kumpulan MySQL, yang memungkinkan kita menggunakan beberapa koneksi sekaligus daripada harus membuka dan menutup beberapa koneksi secara manual.

// Create a MySQL pool
const pool = mysql.createPool(config);

Terakhir, kami akan mengekspor kumpulan MySQL agar aplikasi dapat menggunakannya.

// Export the pool
module.exports = pool;

Anda dapat melihat file konfigurasi database yang telah selesai di repo GitHub kami.

Sekarang kita terhubung ke MySQL dan pengaturan kita selesai, kita dapat beralih ke interaksi dengan database dari API.

Mendapatkan Data API Dari MySQL

Saat ini, routes.js our kami file secara manual membuat larik pengguna JSON, yang terlihat seperti ini.

const users = [{ ...

Karena kita tidak akan lagi menggunakan data statis, kita dapat menghapus seluruh larik tersebut dan menggantinya dengan tautan ke kumpulan MySQL.

// Load the MySQL pool connection
const pool = require('../data/config');

Sebelumnya, GET untuk /users path mengirim usersstatic statis data. Kode kami yang diperbarui akan menanyakan database untuk data itu sebagai gantinya. Kami akan menggunakan kueri SQL untuk SELECT semua dari users tabel, yang terlihat seperti ini.

SELECT * FROM users

Inilah /users baru kami get route akan terlihat seperti, menggunakan pool.query() metode.

// Display all users
app.get('/users', (request, response) => {
    pool.query('SELECT * FROM users', (error, result) => {
        if (error) throw error;

        response.send(result);
    });
});

Di sini, kami menjalankan SELECT kueri dan kemudian mengirimkan hasilnya sebagai JSON ke klien melalui /users titik akhir. Jika Anda me-restart server dan menavigasi ke /users halaman, Anda akan melihat data yang sama seperti sebelumnya, tetapi sekarang dinamis.

Menggunakan Parameter URL

Sejauh ini, titik akhir kami adalah jalur statis—baik / root atau /users —tetapi bagaimana jika kita hanya ingin melihat data tentang pengguna tertentu? Kita harus menggunakan titik akhir variabel.

Untuk pengguna kami, kami mungkin ingin mengambil informasi tentang setiap pengguna individu berdasarkan id unik mereka. Untuk melakukannya, kita akan menggunakan titik dua (: ) untuk menunjukkan bahwa itu adalah parameter rute.

// Display a single user by ID
app.get('/users/:id', (request, response) => {
        ...
    });
});

Kami dapat mengambil parameter untuk jalur ini dengan request.params Properti. Karena milik kita bernama id , begitulah cara kami merujuknya.

const id = request.params.id;

Sekarang kita akan menambahkan WHERE klausa ke SELECT . kami pernyataan untuk hanya mendapatkan hasil yang memiliki id yang ditentukan .

Kami akan menggunakan ? sebagai pengganti untuk menghindari injeksi SQL dan meneruskan id sebagai parameter, alih-alih membuat string gabungan, yang akan kurang aman.

pool.query('SELECT * FROM users WHERE id = ?', id, (error, result) => {
    if (error) throw error;

    response.send(result);
});

Kode lengkap untuk sumber daya pengguna individual kami sekarang terlihat seperti ini:

// Display a single user by ID
app.get('/users/:id', (request, response) => {
    const id = request.params.id;

    pool.query('SELECT * FROM users WHERE id = ?', id, (error, result) => {
        if (error) throw error;

        response.send(result);
    });
});

Sekarang Anda dapat memulai ulang server dan membuka https://localhost/users/2 untuk melihat hanya informasi untuk Gilfoyle. Jika Anda mendapatkan kesalahan seperti Cannot GET /users/2 , itu berarti Anda harus me-restart server.

Membuka URL ini akan mengembalikan satu hasil.

[{
    id: 2,
    name: "Bertram Gilfoyle",
    email: "[email protected]"
}]

Jika itu yang Anda lihat, selamat:Anda telah berhasil menyiapkan parameter rute dinamis!

Mengirim Permintaan POST

Sejauh ini, semua yang kami lakukan telah menggunakan GET permintaan. Permintaan ini aman, artinya tidak mengubah status server. Kami baru saja melihat data JSON.

Sekarang kita akan mulai membuat API benar-benar dinamis dengan menggunakan POST permintaan untuk menambahkan data baru.

Saya sebutkan sebelumnya di artikel Memahami REST bahwa kami tidak menggunakan kata kerja seperti add atau delete di URL untuk melakukan tindakan. Untuk menambahkan pengguna baru ke database, kita akan POST ke URL yang sama tempat kita melihatnya, tetapi cukup siapkan rute terpisah untuk itu.

// Add a new user
app.post('/users', (request, response) => {
    ...
});

Perhatikan bahwa kami menggunakan app.post() bukannya app.get() sekarang.

Karena kami membuat alih-alih membaca, kami akan menggunakan INSERT query di sini, seperti yang kita lakukan pada inisialisasi database. Kami akan mengirimkan seluruh request.body melalui kueri SQL.

pool.query('INSERT INTO users SET ?', request.body, (error, result) => {
    if (error) throw error;

Kami juga akan menentukan status respons sebagai 201 , yang merupakan singkatan dari Created . Untuk mendapatkan id dari item yang terakhir dimasukkan, kita akan menggunakan insertId properti.

response.status(201).send(`User added with ID: ${result.insertId}`);

Seluruh POST Our kami menerima kode akan terlihat seperti ini.

// Add a new user
app.post('/users', (request, response) => {
    pool.query('INSERT INTO users SET ?', request.body, (error, result) => {
        if (error) throw error;

        response.status(201).send(`User added with ID: ${result.insertId}`);
    });
});

Sekarang kami dapat mengirim POST permintaan melalui. Sebagian besar waktu ketika Anda mengirim POST permintaan, Anda melakukannya melalui formulir web. Kita akan mempelajari cara menyiapkannya di akhir artikel ini, tetapi cara tercepat dan termudah untuk mengirim POST pengujian adalah dengan cURL, menggunakan -d (--data) bendera.

Kami akan menjalankan curl -d , diikuti oleh string kueri yang berisi semua pasangan kunci/nilai dan titik akhir permintaan.

curl -d "name=Dinesh Chugtai&[email protected]" http://localhost:3002/users

Setelah Anda mengirimkan permintaan ini, Anda akan mendapatkan tanggapan dari server.

User added with ID: 3

Jika Anda menavigasi ke http://localhost/users , Anda akan melihat entri terbaru ditambahkan ke daftar.

Mengirim Permintaan PUT

POST berguna untuk menambahkan pengguna baru, tetapi kami ingin menggunakan PUT untuk mengubah pengguna yang ada. PUT adalah idempoten, artinya Anda dapat mengirim permintaan yang sama beberapa kali dan hanya satu tindakan yang akan dilakukan. Ini berbeda dari POST , karena jika kami mengirimkan permintaan pengguna baru kami lebih dari sekali, itu akan terus membuat pengguna baru.

Untuk API kami, kami akan menyiapkan PUT untuk dapat menangani pengeditan satu pengguna, jadi kita akan menggunakan :id parameter rute kali ini.

Mari kita buat UPDATE kueri dan pastikan itu hanya berlaku untuk id yang diminta dengan WHERE ayat. Kami menggunakan dua ? placeholder, dan nilai yang kami berikan akan masuk secara berurutan.

// Update an existing user
app.put('/users/:id', (request, response) => {
    const id = request.params.id;

    pool.query('UPDATE users SET ? WHERE id = ?', [request.body, id], (error, result) => {
        if (error) throw error;

        response.send('User updated successfully.');
    });
});

Untuk pengujian kami, kami akan mengedit pengguna 2 dan perbarui alamat email dari [email protected] ke [email protected]. Kita dapat menggunakan cURL lagi, dengan [-X (--request)] bendera, untuk secara eksplisit menentukan bahwa kami mengirim permintaan PUT.

curl -X PUT -d "name=Bertram Gilfoyle" -d "[email protected]" http://localhost:3002/users/2

Pastikan untuk me-restart server sebelum mengirim permintaan, atau Anda akan mendapatkan kode Cannot PUT /users/2 kesalahan.

Anda akan melihat ini:

User updated successfully.

Data pengguna dengan id 2 sekarang harus diperbarui.

Mengirim Permintaan DELETE

Tugas terakhir kami untuk menyelesaikan fungsionalitas CRUD API adalah membuat opsi untuk menghapus pengguna dari database. Permintaan ini akan menggunakan DELETE Kueri SQL dengan WHERE , dan itu akan menghapus pengguna individu yang ditentukan oleh parameter rute.

// Delete a user
app.delete('/users/:id', (request, response) => {
    const id = request.params.id;

    pool.query('DELETE FROM users WHERE id = ?', id, (error, result) => {
        if (error) throw error;

        response.send('User deleted.');
    });
});

Kita dapat menggunakan -X lagi dengan cURL untuk mengirim penghapusan. Mari kita hapus pengguna terbaru yang kita buat.

curl -X DELETE http://localhost:3002/users/3

Anda akan melihat pesan sukses.

User deleted.

Arahkan ke http://localhost:3002 , dan Anda akan melihat bahwa hanya ada dua pengguna sekarang.

Selamat! Pada titik ini, API selesai. Kunjungi repo GitHub untuk melihat kode lengkap routes.js .

Mengirim Permintaan Melalui request Modul

Di awal artikel ini, kami memasang empat dependensi, dan salah satunya adalah request modul. Alih-alih menggunakan permintaan cURL, Anda dapat membuat file baru dengan semua data dan mengirimkannya. Saya akan membuat file bernama post.js yang akan membuat pengguna baru melalui POST .

const request = require('request');

const json = {
    "name": "Dinesh Chugtai",
    "email": "[email protected]",
};

request.post({
    url: 'http://localhost:3002/users',
    body: json,
    json: true,
}, function (error, response, body) {
    console.log(body);
});

Kita dapat memanggil ini menggunakan node post.js di jendela terminal baru saat server sedang berjalan, dan itu akan memiliki efek yang sama seperti menggunakan cURL. Jika ada yang tidak berfungsi dengan cURL, request modul berguna karena kita dapat melihat kesalahan, respons, dan isi.

Mengirim Permintaan Melalui Formulir Web

Biasanya, POST dan metode HTTP lain yang mengubah status server dikirim menggunakan formulir HTML. Dalam contoh yang sangat sederhana ini, kita dapat membuat index.html file di mana saja, dan buat bidang untuk nama dan alamat email. Tindakan formulir akan mengarah ke sumber daya, dalam hal ini http//localhost:3002/users , dan kita akan menentukan metodenya sebagai post .

Buat index.html dan tambahkan kode berikut ke dalamnya:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Node.js Express REST API</title>
</head>

<body>
    <form action="http://localhost:3002/users" method="post">
        <label for="name">Name</label>
        <input type="text" name="name">
        <label for="email">Email</label>
        <input type="email" name="email">
        <input type="submit">
    </form>
</body>

</html>

Buka file HTML statis ini di browser Anda, isi, dan kirimkan saat server sedang berjalan di terminal. Anda akan melihat respon dari User added with ID: 4 , dan Anda akan dapat melihat daftar pengguna baru.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan nilai string salah MySQL saat menyimpan string unicode di Django

  2. Permintaan peka huruf besar/kecil MySQL

  3. Bagaimana cara menghitung kata di MySQL/pengganti ekspresi reguler?

  4. Tidak ada koneksi yang dapat dibuat karena mesin target secara aktif menolaknya (PHP / WAMP)

  5. Bagaimana cara mengubah semua tabel dari MyISAM menjadi InnoDB?