Belajar Deno #2: Membuat CRUD Restful API dengan MySQL

Aldy Tamara Software Engineer

01 Jun 2020, 4 min read

Belajar Deno #2: Membuat CRUD Restful API dengan MySQL

Assalamualaikum Warahmatullahi Wabarakatuh semua, kali ini kita akan sama-sama belajar bagaimana membuat restful api dengan Deno dan MySQL langsung aja ke tutorialnya!

Yang Diperlukan:

  1. Disini saya menggunakan Xampp kalian bisa pakai yang lain seperti laragon atau yang lainnya.
  2. Pastikan versi MySQL atau MariaDB (5.5 and 10.2+) database driver, karena deno ini teknologi baru, biar lebih enak tidak terkendala anomali diharapkan kalian mengupdate semua tools yang kalian gunakan ya! untuk melihat versi mariadb ke localhost/phpmyadmin.
  3. Deno (kalau belum kalian bisa ikuti tutorial install deno disini
  4. Aplikasi Postman untuk Testing API bisa kalian download disini
  5. Text Editor (Saya menggunakan Visual Studio Code)

Tutorial:

  1. Jalankan Xampp Kalian start Apache dan Mysql Kalian
  2. Buat database restfuldeno serta buat table books dan buat juga struktur tablenya sebagai berikut:

    Struktur table

  3. Kalian buat folder baru dimana saja kemudian buka folder tersebut di Text Editor kalian. Nantinya struktur foldernya akan seperti ini

|-- simplerestapi
	|-- controllers
		|--books.ts
	|-- interface
		|--book.ts
	|-- databases.ts
	|-- server.ts
  1. Disini saya memakai oak sebagai middleware aplikasi kita kali ini.Buat file server.ts kemudian copas dan perhatikan code berikut:

File: server.ts

// Import Application dan Router dari library oak dr deno.land
import { Application, Router } from "https://deno.land/x/oak/mod.ts";

// kita import controller yang nantinya kita gunakan
import {
  getOneBook,
  getAllBooks,
  postOneBook,
  putOneBook,
  deleteOneBook,
} from "./controllers/books.ts";

// import router (ini merupakan cara yang umum digunakan di node js
const router = new Router();

// kita buat routenya dan hubungkan dengan controller masing2
router
  .get("/books", getAllBooks)
  .get("/book/:id", getOneBook)
  .post("/book", postOneBook)
  .put("/book/:id", putOneBook)
  .delete("/book/:id", deleteOneBook);


const app = new Application();
app.use(router.routes());
app.use(router.allowedMethods());

await app.listen({ port: 8000 });
  1. Buat file databases.ts copas dan perhatikan kode berikut :

File: databases.ts

// kita menginstall third party library mysql dari web deno.land
import { Client } from "https://deno.land/x/mysql/mod.ts";

// kita buat koneksi dengan mengisi keterangan db
export const client = await new Client().connect({
  hostname: "localhost",
  username: "root",
  db: "restfuldeno",
  password: "",
});
  1. Buat folder interface kemudian buat file book.ts lalu copas & perhatikan kode berikut:

File: book.ts

export interface Book {
  id: number;
  title: string;
  description: string;
  price: number;
}
  1. Kemudian kalian terakhit kalian buat folder controllers dan buat file books.ts serta copas dan perhatikan kode berikut:

File : books.ts

// import interface book
import { Book } from "../interface/book.ts";
// import koneksi database agar bisa digunakan
import { client } from "../databases.ts";

// Berikut query untuk get all books
const getAllBooks = async ({ response }: { response: any }) => {
  const books: Book[] = await client.query("select * from books");
  response.body = {
    success: true,
    data: books,
  };
};

// Berikut query untuk get one book
const getOneBook = async (
  { params, response }: { params: any; response: any },
) => {
  let Book: Book = await client.query(
    "select * from books where id = ?",
    [params.id],
  );
  response.body = {
    success: true,
    data: Book,
  };
};

// Berikut query untuk menginsert one book
const postOneBook = async (
  { params, request, response }: {
    params: any;
    request: any;
    response: any;
  },
) => {
  const result = await request.body();
  const bookfix: Book = result.value;
  const results = await client.query(
    "INSERT INTO books(title,description,price) values(?,?,?)",
    [bookfix.title, bookfix.description, bookfix.price],
  );
  response.body = {
    success: true,
    data: null,
  };
};

// Berikut query untuk update one book
const putOneBook = async (
  { params, request, response }: {
    params: { id: string };
    request: any;
    response: any;
  },
) => {
  const result = await request.body();

  const book: Book = result.value;
  const results = await client.query(
    "update books set title = ?,description=?,price=? where id=?",
    [book.title, book.description, book.price, params.id],
  );
  response.body = {
    success: true,
    data: null,
  };
};

// berikut query untuk mendelete one book
const deleteOneBook = async (
  { params, response }: { params: any; response: any },
) => {
  let result = await client.execute(
    `delete from books where id = ?`,
    [params.id],
  );
  response.body = {
    success: true,
    data: null,
  };
};

// lalu export agar bisa dipanggil di file lain
export { getAllBooks, getOneBook, postOneBook, putOneBook, deleteOneBook };
  1. Save semua file dan ketik diterminal
// allownet untuk membuka akses ke network 
// kita harus biasakan menambahkan perintah allow jika menggunakan deno

deno run --allow-net server.ts
  1. Sekarang kita testing aplikasinya dengan aplikasi postman berikut hasilnya :

Run : GetAllBooks

Run GetAllBooks

Run : GetOneBook

Run GetOneBook

Run : PostOneBook

Run PostOneBook

Run : PutOneBook

Run PutOneBook

Run : DeleteOneBook

Run DeleteOneBook

Source Codenya bisa di download Disini Tapi alangkah baiknya kalian coba coding sendiri

Nah dengan hasil diatas kita bisa menyimpulkan api yang dibuat berjalan dengan baik. Sekian tutorial kali ini semoga bermanfaat buat kalian semua!


Tags:



Baca artikel menarik lainnya: