Sunday, October 11, 2026

HTTP 401 vs 403 — Apa Bedanya dan Kenapa Penting?

 

Dua kode ini kelihatan mirip — sama-sama artinya “akses ditolak”. Tapi sebenarnya keduanya menjawab dua pertanyaan yang berbeda. Salah pilih kode, API kamu jadi membingungkan dan berpotensi bocor informasi.

Inti Perbedaannya dalam Satu Kalimat

401 Unauthorized → Authentication — “Kamu ini siapa? Belum kenal aku.”

403 Forbidden → Authorization — “Aku sudah tahu kamu siapa, tapi kamu tidak punya izin untuk ini.”

1. 401 Unauthorized — Masalah Identitas

Server belum tahu siapa yang sedang mengakses. Kredensialnya tidak ada, tidak valid, atau sudah kedaluwarsa.

  • Tidak mengirim token / API key sama sekali
  • Token sudah expired
  • Token rusak, dipalsukan, atau signature-nya tidak cocok
  • Password / kredensial salah saat login

Ciri khas: server mengirim header WWW-Authenticate — semacam petunjuk cara login yang benar.

Solusi untuk client: login ulang atau refresh token.

2. 403 Forbidden — Masalah Izin

Server sudah tahu siapa kamu, dan identitasmu sah. Tapi akunmu tidak punya hak untuk melakukan operasi itu.

  • Token valid, tapi role-nya tidak cukup (user biasa mencoba akses endpoint admin)
  • Mencoba mengubah resource milik orang lain
  • Akun diblokir, dinonaktifkan, atau langganannya habis
  • Akses ditolak berdasarkan IP, region, atau kebijakan keamanan

Ciri khas: login ulang tidak akan menolong. Izinnya memang tidak ada.

Solusi untuk client: minta akses ke admin, atau jangan lakukan operasi itu.

Analogi Sederhana: Satpam Kantor

Bayangkan kamu masuk ke sebuah gedung perkantoran.

401 = Satpam bilang: “Maaf, Anda belum menunjukkan kartu identitas. Silakan lapor dulu di resepsionis.” Kamu belum terbukti siapa.

403 = Satpam bilang: “Kartu Anda valid, Pak. Tapi lantai direksi hanya untuk manajemen. Anda staf biasa.” Identitas jelas, izin tidak ada.

Perbandingan Cepat

Aspek401403
KonsepAuthenticationAuthorization
PertanyaannyaSiapa kamu?Boleh tidak kamu lakukan ini?
Status identitasBelum terbuktiSudah terbukti
Login ulang menolong?YaTidak
Contoh pemicuToken expiredRole tidak cukup
Header khususWWW-AuthenticateTidak ada

Contoh Nyata di Kode

Skenario 1 — token expired → 401

GET /api/v1/profile
Authorization: Bearer <token_sudah_expired>

Response: 401 Unauthorized
{
  "error": "Token expired, silakan login ulang"
}

Skenario 2 — token valid tapi bukan admin → 403

GET /api/v1/admin/users
Authorization: Bearer <token_valid_user_biasa>

Response: 403 Forbidden
{
  "error": "Akses ditolak: butuh role admin"
}

Kesalahan Umum yang Sering Terjadi

  • Pakai 403 padahal token-nya expired. Client jadi bingung: harus login ulang, atau memang tidak punya izin? Akibatnya user terjebak di loop error.
  • Pakai 401 untuk masalah izin. Client akan mencoba refresh token terus-menerus padahal percuma — izinnya memang tidak ada.
  • Pakai 400 atau 404 untuk urusan auth. 404 memang sengaja dipakai sebagian sistem untuk menyembunyikan keberadaan resource, tapi jangan campur aduk dengan auth.
  • Membocorkan detail di pesan error. Jangan tulis “user budi bukan admin”. Cukup “akses ditolak”. Pesan detail bisa membantu penyerang memetakan sistem.

Catatan Penting: Nama 401 Itu Menyesatkan

Secara resmi namanya “401 Unauthorized”, tapi sebenarnya artinya unauthenticated (belum terautentikasi). Ini salah satu penamaan paling membingungkan di dunia HTTP — dan sering jadi jebakan saat interview kalau kamu tidak sadar. Yang benar-benar soal authorization justru 403.

Kenapa Ini Penting untuk Interview

  • Menunjukkan kamu paham perbedaan authentication vs authorization — konsep dasar keamanan sistem
  • Relevan saat mendesain API dan sistem auth (OAuth, JWT, RBAC)
  • Menyangkut keamanan: pesan error yang tepat mencegah kebocoran informasi
  • Berhubungan dengan UX: kode yang tepat membuat client tahu harus berbuat apa

Ringkasan

401 = belum terautentikasi — “Siapa kamu?” → login ulang atau refresh token.

403 = sudah terautentikasi, izin kurang — “Kamu tidak boleh.” → minta akses, bukan login ulang.

System Design Interview — Panduan Lengkap


Prinsip Utama: Jangan langsung menggambar arsitektur di awal. Yang dinilai bukan bagusnya diagram komponen, tapi kemampuan menjelaskan “KENAPA” di balik setiap keputusan desain.

6-Step Workflow System Design Interview

1. Requirements (Kebutuhan)

  • Functional Requirements — Apa yang harus dilakukan sistem? (fitur utama)
  • Non-Functional Requirements — Scalability, availability, latency, consistency, durability
  • Klarifikasi dengan interviewer: scope, batasan, asumsi

2. Capacity Estimation (Estimasi Kapasitas)

  • Jumlah users (DAU/MAU)
  • QPS (Queries Per Second) — rata-rata dan peak traffic
  • Estimasi storage dan bandwidth
  • Angka ini menentukan keputusan scaling berikutnya

3. APIs & Data Model

  • Definisikan API endpoints (REST/gRPC)
  • Rancang schema database (tables, relationships, indexes)
  • Pilih SQL vs NoSQL berdasarkan kebutuhan

4. High-Level Design (Desain Tingkat Tinggi)

  • Gambarkan block diagram utama: clients, services, databases, caches, queues
  • Tentukan komponen inti dan interaksi antar komponen
  • Fokus pada data flow, belum detail di balik komponen

5. Deep Dive (Analisis Mendalam)

  • Scaling: horizontal vs vertical, load balancing, sharding, replication
  • Failure handling: single point of failure, redundancy, failover
  • Bottlenecks: DB hotspot, N+1 queries, hot partitions
  • Strategi: caching, CDN, async processing, message queues

6. Trade-offs & Summary

  • Rangkum keputusan utama + alasannya
  • Jelaskan trade-off yang diterima (consistency vs availability, latency vs durability)
  • Tunjukkan pemahaman konsekuensi setiap pilihan

Mindset yang Harus Dibawa

JanganHarus
Langsung gambar diagramMulai dari requirements
Hafal pola arsitekturPahami masalah dulu
Sebut komponen tanpa alasanJelaskan WHY setiap keputusan
Anggap diagram = jawabanAnggap diagram = komunikasi

Tips Ekstra

  • Komunikasi aktif — berpikir keras secara verbal (think aloud)
  • Tanya dulu — jangan berasumsi requirements
  • Iteratif — mulai simpel, tambah kompleksitas bertahap
  • Angka itu penting — estimation memberi arah desain
  • Trade-offs menunjukkan kedewasaan — tidak ada desain sempurna, yang ada paling sesuai

Checklist Sebelum Interview

 Paham sistem nyata: URL shortener, chat, news feed, ride-sharing

 Latihan capacity estimation (QPS, storage, bandwidth)

 Kuat dasar: caching, sharding, replication, load balancing, message queues

 Biasakan menjelaskan “kenapa” di setiap langkah


Thursday, November 21, 2019

Perbandingan Design Pattern dengan Design principle

Di dalam dunia software engineering pastinya kalian akan menemukan beberapa istilah yang baru , dalam tulisan ini saya akan menjelaskan mengenai perbandingan antara istilah design pattern dengan design principle 

Design principle
Bisa disebut juga pedoman umum level tinggi dalam mendesain sebuah aplikasi yang lebih baik. Design principle tidak memberikan pedoman untuk mengimplementasi dan terikat dalam sebuah bahasa pemrograman. 
Untuk contoh sebuah Design Principle yaitu SOLID dengan salah satunya bisa dijelaskan yaitu S = SRP (Single Responsibility Principle). Dalam SRP dijelaskan bahwa seharusnya class dalam sebuah bahasa pemrograman hanya memiliki satu alasan untuk diubah. Di dalam SRP tidak dijelaskan secara spesific untuk cara mengimplementasi SRP principle dalam sebuah bahasa pemrograman.

Design Pattern
Dalam hal ini design pattern adalah pedoman umum level bawah yang berhubungan dengan level implementation. Pada umumnya terjadi di Object Oriented problem.
Dengan kata lain design pattern memberi solusi untuk beberapa masalah yang biasa terjadi di dalam OOP(Object Oriented Programming). 
Untuk contohnya pada kasus OOP(Object Oriented Programming), jika kamu ingin membuat class yang mana hanya memiliki satu object yang sama dalam satu waktu, kemudian kamu dapat menggunakan pendekatan menggunakan Singleton Pattern untuk memecahkan masalah dalam level implementasi bahasa pemrograman.
Ada banyak Design pattern yang bisa digunakan, sebagai contoh : Abstrak , Factory dan lain-lain

Monday, May 7, 2018

Apa itu Developer ?

Sebuah pertanyaan yang masih menjadi sesuatu yang sulit untuk di jabarkan dalam kehidupan orang awam. terkadang mereka hidup seperti dibalik layar. Dalam kecanggihan sebuah teknologi pasti ada mereka. namun yang jadi pertanyaan , Apa itu developer ? siapa developer ? 

Developer yang akan kita bahas hari ini bukan seorang developer yang membuat sebuah perumahan ataupun apa lah ?. Developer yang akan kita bahas hari ini adalah Developer yang mana seorang yang memebangun sebuah sistem aplikasi yang mungkin kalian akan tahu kalo di istilahkan , orang yang membuat Facebook.

Developer ini apa si tugasnya ?. 

Developer bertugas untuk membuat sebuah aplikasi , stop sampe disitu aja ? pastinya ngga, banyak yang harus di kerjakan salah satunya bagaiamana sebuah app bisa membantu orang 

Friday, May 1, 2015

Sintak trigger di mysql

DELIMITER |
 
CREATE TRIGGER hapus_tr_penjualan AFTER DELETE
    ON tr_penjualan FOR EACH ROW
BEGIN
  INSERT INTO tr_penjualan_hapus
        (       tgl_transaksi,
                kode_cabang,
                kode_kasir,
                kode_item,
                kode_produk,
                jumlah_pembelian,
                tgl_perubahan,
                nama_user
        )
  VALUES
        (       OLD.tgl_transaksi,
                OLD.kode_cabang,
                OLD.kode_kasir,
                OLD.kode_item,
                OLD.kode_produk,
                OLD.jumlah_pembelian,
                SYSDATE(),
                CURRENT_USER
        );
END;
 
|
 
DELIMITER ;

Tuesday, April 28, 2015

menampilkan data dari mysql dengan menggunakan php

menampillkan data di php

Dalam membuat sistem pastinya kita tidak jauh dengan menampillkan data di php.
berikut ini adalah sintak menampillkan data di php dengan menampilkan dalam bentuk tabel :

sintak menampillkan data di php

$sql=mysql_query("select*from admin");
echo"
<h3 align='center'>User</h3>
<table align='center' width='50%' border='1'>
<tr>
<th>id_admin</th>
<th>nama</th>
<th>username</th>
<th>password</th>
</tr>";
while($data=mysql_fetch_array($sql))
{
echo"
<tr>
<td>$data[id_admin]</td>
<td>$data[nama_admin]</td>
<td>$data[username]</td>
<td>$data[password]</td>
</tr>";
}
echo"</table>";
demikian artikel tentang menampillkan data di php, semoga dapat beramnfaat

Buku penelitian : Langkah dan Diagram Alir Penelitian

Buku penelitian : Langkah dan Diagram Alir Penelitian

Dalam membuat sebuah peneltian pastinya kita tidak akan jauh dengan langkah dan diagram alir penelitian. hal ini biasanya akan terletak pada metodologi penelitian. dan pasti sering digunakan dalam membuat sebuah rancangan sebuah sistem. 
Berikut ini langkah dan diagram alir penelitian :

1. Langkah Penelitian

langkah penelitian akan menjelaskan beberapa langkah yang harus dilakukan dalam sebuah penelitian, berikut ini contohnya :

a. Analisa kebutuhan

Analisa kebutuhan merupakan langkah awal untuk menentukan desain sistem dengan menu-menu yang diperlukan oleh user untuk melakukan pengelolaan website.

b. Desain sistem

Desain merupakan tahap penyusunan proses, data, aliran proses dan hubungan antar data yang paling optimal untuk menjalankan proses aplikasi dan memenuhi kebutuhan user sesuai dengan hasil analisa kebutuhan. Dokumentasi yang dihasilkan dari tahap desain sistem ini antara lain : Use Case Diagram, Activity Diagram, Sequence Diagram, serta Class Diagram.