REST API dan ExpressJS
Pengembangan Aplikasi Web (TIF213146)
DTETI FT UGM
Dr. Bimo Sunarfri Hantono, S.T., [Link].
bhe@[Link]
LOCALLY ROOTED,
GLOBALLY RESPECTED [Link]
HyperText Transfer Protocol (HTTP)
HTTP
Overview
● Merupakan protokol yang umum digunakan dalam komunikasi web.
● Protokol HTTP menggunakan protokol TCP di layer transport (OSI
model) yang bersifat lossless.
● Browser bertindak sebagai HTTP client yang akan melakukan
pemanggilan API ke HTTP server.
● Satu siklus pemanggilan API terdiri dari pasangan HTTP request
dan HTTP response.
HTTP
Three Way Handshake
● Mekanisme three-way handshake
terjadi di TCP. Mekanisme ini
memastikan pertukaran data
dilakukan secara utuh dari client ke
server.
● Pada HTTP/1.0, setiap koneksi
terjadi secara independen. Itu berarti
three-way handshake dilakukan
antara client-server untuk setiap
pemanggilan API.
Universal Resource Locator (URL)
URL
Overview
● URL (Universal Resource Locator) merupakan ID unik yang
digunakan untuk mengakses informasi di internet.
● URL digunakan untuk mengidentifikasi halaman web, API,
hingga file binari seperti gambar, audio, dan video.
● Secara bawaan HTTP menggunakan port 80, HTTPS
menggunakan port 443
URL
Overview
● protokol: mengidentifikasi jenis protokol yang digunakan, misalnya HTTP atau
HTTPS
● subdomain: nama tambahan yang disematkan pada nama domain, biasanya
sebagai pengenal suatu scope spesifik dari sebuah web.
● SLD: Second Level Domain, identifier yang merupakan tanda pengenal dari
sebuah domain. Nama domain biasanya merujuk pada brand sebuah layanan
yang dikembangkan
URL
Overview
● TLD: Top Level Domain, merupakan identifier yang diatur oleh The
Internet Corporation for Assigned Names and Numbers (ICANN). TLD
berperan dalam mengelompokkan domain ke dalam kategori tertentu
untuk mempermudah pencarian domain dalam protokol DNS.
● path: “jalur” yang mengidentifikasi lokasi tertentu pada web, bisa berupa
halaman web, layanan API, atau file.
Diskusi
API URL
Jika API dapat diidentifikasi dengan URL, mengapa dua API yang
memiliki path yang sama dari dua web dapat mengembalikan
hasil berbeda? Misalnya:
[Link]
[Link]
HTTP Methods
HTTP Methods
● Method berfungsi untuk mendefinisikan aksi tertentu yang
dapat dilakukan terhadap API.
● Terdapat 4 HTTP method yang umum digunakan:
○ GET : memperoleh atau mengakses resource berupa teks, halaman
web, atau file
○ POST: mengirim data untuk disimpan di server atau database
○ PUT: melakukan modifikasi terhadap data tertentu di server atau
database
○ DELETE: menghapus data yang sudah ada di server atau database
HTTP Methods
● API dengan path yang sama dapat memiliki beberapa method,
misalnya:
○ GET /api/student : untuk mendapatkan data mahasiswa
○ POST /api/student : untuk menyimpan data mahasiswa baru
○ DELETE /api/student : untuk menghapus data mahasiswa
API Parameters
API Parameters
● Parameter merupakan informasi yang dapat disematkan pada
URL API untuk merujuk lokasi atau menjalankan fungsi
spesifik.
● Setidaknya terdapat 4 jenis parameter yang dapat digunakan,
yaitu:
○ Path parameter: mengidentifikasi lokasi spesifik
○ Query parameter: meminta server melakukan sesuatu dengan
perilaku tertentu
○ Header parameter: Metadata dari request
○ Payload parameter: Data yang bisa dikirim bersama dengan request
(request body)
API Parameters
Path Parameter
● API URL tidak selalu bersifat statik. Path parameter
memungkinkan API URL untuk berubah sesuai dengan lokasi
yang dituju.
● Path parameter dapat dideklarasikan dengan titik koma (:).
Contoh: /api/dteti/students/:niu
● Untuk memanggil API tersebut, ganti parameter dengan suatu
nilai, seperti /api/dteti/students/4910203 atau
/api/dteti/students/4910287
● API dapat memiliki lebih dari satu path parameter.
API Parameters
Query Parameter
● Query parameter memberikan informasi tambahan kepada
server untuk mengerjakan sesuatu dengan perilaku spesifik
● Contoh: /api/dteti/students?sortBy=name. API tersebut
meminta server untuk mengembalikan daftar informasi
mahasiswa yang diurutkan berdasarkan nama
● API dapat memiliki lebih dari satu query parameter. Setiap
parameter dipisahkan dengan tanda (&).
● Contoh: /api/dteti/students?sortBy=name&year=2023
API Parameters
Header Parameter
● HTTP Header merupakan metadata yang disematkan sebagai
informasi tambahan pada komunikasi HTTP.
● HTTP Header dapat ditambahkan oleh server maupun client.
● Terdapat banyak HTTP Header, beberapa di antaranya yang
sering digunakan seperti:
○ Content-Type: mendeskripsikan jenis data yang dikirimkan
○ Authorization: header yang menyimpan kredensial untuk otorisasi
pengguna
○ Accept: mendeskripsikan jenis data yang diterima di sisi penerima.
API Parameters
Payload Parameter
● Payload merupakan data yang diterima oleh client maupun
server dan memiliki kegunaan langsung.
● Ketika client memanggil API dengan method POST atau PUT
biasanya disertai penambangan request body sebagai
payload.
● Sebaliknya, server juga akan mengembalikan payload
terutama pada pemanggilan API dengan method GET.
ExpressJS
Express JS
Overview
• Express JS merupakan framework dari
NodeJS yang dirancang secara fleksibel dan
sederhana untuk membantu tahap
pengembangan aplikasi back-end.
• Express JS juga sangat berbeda dengan
framework Laravel, di mana library ini
memberikan kebebasan bagi para developer
untuk mendesain aplikasi, sehingga
memungkinkan bagi setiap pengembang
memiliki rancangan arsitektur yang berbeda
dalam software yang dibangun.
Express JS
Core Features
• Express JS dapat digunakan untuk desain
SPA, MPA, dan hybrid web app.
• Express JS juga memungkinkan
pembuatan middleware untuk merespons
sebuah HTTP Request.
• Express JS memungkinkan routing
berdasarkan HTTP Method dan URL.
• Express JS memungkinkan me-render
sebuah halaman HTML yang dinamis
berdasarkan argumen/input yang diterima.
Best Practice
Best Practice
● Menerapkan standar seperti
Representational State
Transfer (REST) yang
merupakan gaya penulisan API
web. ([Link]
● Menggunakan HTTP Method
yang sesuai. Hal ini dilakukan
agar pengembang BE dan FE
memiliki pemahaman yang sama
terkait fungsi API
Best Practice
Menggunakan versi stabil
• Versi tertentu Express seperti 2.x dan 3.x sudah
tidak didukung dan di-maintain.
• Untuk versi express yang tidak aman atau
memiliki celah keamanan, dapat di cek di website
resmi. Pastikan selalu menggunakan versi yang
stabil.
• DON’T update too early just because new version
drops. Wait until a stable version release.
Best Practice
Menggunakan TLS/SSL (HTTPS)
• Pastikan selalu menggunakan Transport Layer
Security (TLS) untuk mengamankan koneksi dan
transfer sensitif data.
• Melalui teknologi ini, data akan selalu dienkripsi
sebelum dikirimkan dari client ke server sehingga
mencegah tipikal hack.
• Pada kenyataannya request seperti AJAX dan
POST masih vulnerable terhadap packet sniffing
dan man-in-the-middle attacks walaupun proses
ini tidak terlihat secara kasat mata.
Best Practice
Hindari bergantung pada package
• NPM memiliki 2 sisi. Salah satu sisi adalah kemudahan
dan kenyamanan untuk digunakan. Namun di sisi lain,
karena dependency yang kompleks dapat tercipta
critical vulnerability tanpa diketahui, ini yang sering
disebut sebagai common dependency pitfall.
• Semenjak npm versi 6, NPM akan me-review setiap
dependency yang di-install. Kita dapat juga
menggunakan perintah ‘npm audit’.
• Salah satu masalah lain adalah deprecated
dependency, pastikan dependency yang digunakan
selalu versi stabil terbaru dan tidak menggunakan
dependency yang tidak lagi dikembangkan / aktif.
Best Practice
Gunakan error code yang jelas
• HTTP memiliki lebih dari 100 status kode. Status ini digunakan untuk
membantu pengembang mengidentifikasi error dengan cepat dan efisien.
Pastikan selalu menyertakan status code ketika melakukan transaksi melalui
HTTP.
• [Link]
Best Practice
Gunakan error code yang jelas
HTTP status yang umum ditemui:
• 400 Bad Request – This means that client-side input fails validation.
• 401 Unauthorized – This means the user isn’t not authorized to access a resource. It
usually returns when the user isn’t authenticated.
• 403 Forbidden – This means the user is authenticated, but it’s not allowed to access a
resource.
• 404 Not Found – This indicates that a resource is not found.
• 500 Internal server error – This is a generic server error. It probably shouldn’t be thrown
explicitly.
• 502 Bad Gateway – This indicates an invalid response from an upstream server.
• 503 Service Unavailable – This indicates that something unexpected happened on server
side (It can be anything like server overload, some parts of the system failed, etc.).
Best Practice
Gunakan error code yang jelas
• HTTP Status cheatcode:
• 2xx: success
• 3xx: redirect
• 4xx: client side failure
• 5xx: server side failure